{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# 第三课：图神经网络算法（一）\n",
    "\n",
    "本次作业内容：实现GCN模型和GAT 模型的send和recv 函数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 安装依赖\n",
    "# !pip install paddlepaddle==1.8.5\n",
    "!pip install pgl -q"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## 1. GCN模型\n",
    "\n",
    "请同学们完成以下send 函数和 recv 函数对应的选择题。如果不太懂PaddlePaddle的API，可以直接到我们的[官网](https://www.paddlepaddle.org.cn)查看相关的用法。\n",
    "\n",
    "注：这里我们给出的是简化版本的 GCN 模型，完整的 GCN 代码可查看: https://github.com/PaddlePaddle/PGL/blob/main/pgl/layers/conv.py#L27"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Writing userdef_gcn.py\n"
     ]
    }
   ],
   "source": [
    "%%writefile userdef_gcn.py\n",
    "import paddle.fluid as fluid\n",
    "\n",
    "def gcn_layer(gw, feature, hidden_size, activation, name, norm=None):\n",
    "\n",
    "    # send函数\n",
    "    def send_func(src_feat, dst_feat, edge_feat):\n",
    "        '''\n",
    "         请完成填空\n",
    "         提示：\n",
    "             src_feat 为源节点特征\n",
    "             src_feat \n",
    "               { \n",
    "                   \"h\":  Tensor形状为 [边数目, hidden_size]\n",
    "               }\n",
    "\n",
    "             dst_feat 为目标节点特征\n",
    "             dst_feat\n",
    "               { \n",
    "                   \"h\":  Tensor形状为 [边数目, hidden_size]\n",
    "                }\n",
    "            由于本题目没有边特征，edge_feat为 None\n",
    "        '''\n",
    "        # 问题1：下列两个feature，我们选择哪个\n",
    "\n",
    "        ans1 = \"A\" # \"A\" or \"B\" \n",
    "        if ans1 == \"A\":\n",
    "            feat = src_feat[\"h\"]\n",
    "        elif ans1 == \"B\":\n",
    "            feat = dst_feat[\"h\"]\n",
    "        return feat\n",
    "\n",
    "    # recv函数\n",
    "    def recv_func(msg):\n",
    "        '''\n",
    "        请完成填空\n",
    "        提示：\n",
    "            1. 使用到的函数：fluid.layers.sequence_pool(x, pool_type)\n",
    "            2. 接受到的消息是一个变长Tensor，在Paddle里被称为LodTensor\n",
    "                例如: \n",
    "                msg = [ \n",
    "                        [1, 2],      # 节点0 接受的特征\n",
    "                        [1],         # 节点1 接受的特征\n",
    "                        [2, 3, 4]    # 节点2 接受的特征\n",
    "                    ]\n",
    "                \n",
    "                对于不定长Tensor，我们可以使用一系列的sequence操作。例如sequence_pool\n",
    "                例如： 对上述msg进行sequence_pool求和的操作, 我们会得到\n",
    "\n",
    "                    msg = [ \n",
    "                        [3],      # 节点0 接受的特征\n",
    "                        [1],         # 节点1 接受的特征\n",
    "                        [9]    # 节点2 接受的特征\n",
    "                    ]\n",
    "        '''\n",
    "        # 问题2：在 GCN里面，我们的 Recv 函数是\n",
    "        \n",
    "        ans = \"A\"  # \"A\" or \"B\" or \"C\"\n",
    "        if ans == \"A\":\n",
    "            return fluid.layers.sequence_pool(msg, \"sum\")\n",
    "        elif ans == \"B\":\n",
    "            return fluid.layers.sequence_pool(msg, \"average\")\n",
    "        elif ans == \"C\":\n",
    "            return fluid.layers.sequence_pool(msg, \"max\")\n",
    "        \n",
    "    # 消息传递机制执行过程\n",
    "    msg = gw.send(send_func, nfeat_list=[(\"h\", feature)]) \n",
    "    output = gw.recv(msg, recv_func)\n",
    "\n",
    "    # 通过以activation为激活函数的全连接输出层\n",
    "    output = fluid.layers.fc(output,\n",
    "                            size=hidden_size,\n",
    "                            bias_attr=False,\n",
    "                            act=activation,\n",
    "                            name=name)\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W1126 13:19:53.207566   735 device_context.cc:252] Please NOTE: device: 0, CUDA Capability: 70, Driver API Version: 10.1, Runtime API Version: 9.0\n",
      "W1126 13:19:53.212730   735 device_context.cc:260] device: 0, cuDNN Version: 7.6.\n",
      "开始训练 Cora数据集 240 Epoch\n",
      "Epoch 0 训练集 Loss: 1.946275 训练集 准确率: 0.192857 验证集 Loss: 1.926466 验证集 准确率: 0.446667 \n",
      "Epoch 1 训练集 Loss: 1.916257 训练集 准确率: 0.471429 验证集 Loss: 1.905986 验证集 准确率: 0.543333 \n",
      "Epoch 2 训练集 Loss: 1.882786 训练集 准确率: 0.507143 验证集 Loss: 1.880727 验证集 准确率: 0.583333 \n",
      "Epoch 3 训练集 Loss: 1.841129 训练集 准确率: 0.557143 验证集 Loss: 1.850428 验证集 准确率: 0.593333 \n",
      "Epoch 4 训练集 Loss: 1.773378 训练集 准确率: 0.628571 验证集 Loss: 1.816237 验证集 准确率: 0.596667 \n",
      "Epoch 5 训练集 Loss: 1.766105 训练集 准确率: 0.578571 验证集 Loss: 1.781940 验证集 准确率: 0.633333 \n",
      "Epoch 6 训练集 Loss: 1.690507 训练集 准确率: 0.664286 验证集 Loss: 1.746448 验证集 准确率: 0.640000 \n",
      "Epoch 7 训练集 Loss: 1.644084 训练集 准确率: 0.657143 验证集 Loss: 1.711530 验证集 准确率: 0.646667 \n",
      "Epoch 8 训练集 Loss: 1.598337 训练集 准确率: 0.657143 验证集 Loss: 1.675126 验证集 准确率: 0.660000 \n",
      "Epoch 9 训练集 Loss: 1.541841 训练集 准确率: 0.700000 验证集 Loss: 1.637713 验证集 准确率: 0.670000 \n",
      "Epoch 10 训练集 Loss: 1.513630 训练集 准确率: 0.657143 验证集 Loss: 1.598854 验证集 准确率: 0.683333 \n",
      "Epoch 11 训练集 Loss: 1.432129 训练集 准确率: 0.728571 验证集 Loss: 1.559932 验证集 准确率: 0.700000 \n",
      "Epoch 12 训练集 Loss: 1.335641 训练集 准确率: 0.785714 验证集 Loss: 1.520471 验证集 准确率: 0.706667 \n",
      "Epoch 13 训练集 Loss: 1.337248 训练集 准确率: 0.814286 验证集 Loss: 1.481045 验证集 准确率: 0.716667 \n",
      "Epoch 14 训练集 Loss: 1.247506 训练集 准确率: 0.771429 验证集 Loss: 1.441685 验证集 准确率: 0.723333 \n",
      "Epoch 15 训练集 Loss: 1.194904 训练集 准确率: 0.814286 验证集 Loss: 1.402177 验证集 准确率: 0.733333 \n",
      "Epoch 16 训练集 Loss: 1.148763 训练集 准确率: 0.778571 验证集 Loss: 1.363037 验证集 准确率: 0.736667 \n",
      "Epoch 17 训练集 Loss: 1.063375 训练集 准确率: 0.850000 验证集 Loss: 1.324566 验证集 准确率: 0.743333 \n",
      "Epoch 18 训练集 Loss: 1.043541 训练集 准确率: 0.842857 验证集 Loss: 1.286352 验证集 准确率: 0.746667 \n",
      "Epoch 19 训练集 Loss: 1.025060 训练集 准确率: 0.814286 验证集 Loss: 1.249391 验证集 准确率: 0.753333 \n",
      "Epoch 20 训练集 Loss: 1.028127 训练集 准确率: 0.785714 验证集 Loss: 1.214227 验证集 准确率: 0.756667 \n",
      "Epoch 21 训练集 Loss: 0.929176 训练集 准确率: 0.857143 验证集 Loss: 1.180259 验证集 准确率: 0.756667 \n",
      "Epoch 22 训练集 Loss: 0.897986 训练集 准确率: 0.878571 验证集 Loss: 1.147530 验证集 准确率: 0.766667 \n",
      "Epoch 23 训练集 Loss: 0.842818 训练集 准确率: 0.857143 验证集 Loss: 1.116558 验证集 准确率: 0.770000 \n",
      "Epoch 24 训练集 Loss: 0.810723 训练集 准确率: 0.850000 验证集 Loss: 1.087521 验证集 准确率: 0.766667 \n",
      "Epoch 25 训练集 Loss: 0.823627 训练集 准确率: 0.850000 验证集 Loss: 1.060135 验证集 准确率: 0.766667 \n",
      "Epoch 26 训练集 Loss: 0.783789 训练集 准确率: 0.857143 验证集 Loss: 1.035226 验证集 准确率: 0.770000 \n",
      "Epoch 27 训练集 Loss: 0.805495 训练集 准确率: 0.835714 验证集 Loss: 1.011431 验证集 准确率: 0.770000 \n",
      "Epoch 28 训练集 Loss: 0.694755 训练集 准确率: 0.878571 验证集 Loss: 0.988598 验证集 准确率: 0.770000 \n",
      "Epoch 29 训练集 Loss: 0.758612 训练集 准确率: 0.878571 验证集 Loss: 0.967292 验证集 准确率: 0.776667 \n",
      "Epoch 30 训练集 Loss: 0.733427 训练集 准确率: 0.835714 验证集 Loss: 0.948193 验证集 准确率: 0.780000 \n",
      "Epoch 31 训练集 Loss: 0.649714 训练集 准确率: 0.857143 验证集 Loss: 0.930167 验证集 准确率: 0.793333 \n",
      "Epoch 32 训练集 Loss: 0.641992 训练集 准确率: 0.900000 验证集 Loss: 0.914169 验证集 准确率: 0.796667 \n",
      "Epoch 33 训练集 Loss: 0.655321 训练集 准确率: 0.878571 验证集 Loss: 0.898941 验证集 准确率: 0.796667 \n",
      "Epoch 34 训练集 Loss: 0.552518 训练集 准确率: 0.921429 验证集 Loss: 0.884449 验证集 准确率: 0.796667 \n",
      "Epoch 35 训练集 Loss: 0.552850 训练集 准确率: 0.864286 验证集 Loss: 0.870817 验证集 准确率: 0.800000 \n",
      "Epoch 36 训练集 Loss: 0.579278 训练集 准确率: 0.885714 验证集 Loss: 0.857670 验证集 准确率: 0.803333 \n",
      "Epoch 37 训练集 Loss: 0.544902 训练集 准确率: 0.907143 验证集 Loss: 0.844481 验证集 准确率: 0.803333 \n",
      "Epoch 38 训练集 Loss: 0.554682 训练集 准确率: 0.900000 验证集 Loss: 0.831528 验证集 准确率: 0.803333 \n",
      "Epoch 39 训练集 Loss: 0.559233 训练集 准确率: 0.885714 验证集 Loss: 0.821224 验证集 准确率: 0.803333 \n",
      "Epoch 40 训练集 Loss: 0.512767 训练集 准确率: 0.900000 验证集 Loss: 0.810743 验证集 准确率: 0.803333 \n",
      "Epoch 41 训练集 Loss: 0.441930 训练集 准确率: 0.935714 验证集 Loss: 0.801518 验证集 准确率: 0.803333 \n",
      "Epoch 42 训练集 Loss: 0.474985 训练集 准确率: 0.928571 验证集 Loss: 0.793182 验证集 准确率: 0.803333 \n",
      "Epoch 43 训练集 Loss: 0.422261 训练集 准确率: 0.942857 验证集 Loss: 0.785226 验证集 准确率: 0.803333 \n",
      "Epoch 44 训练集 Loss: 0.434610 训练集 准确率: 0.914286 验证集 Loss: 0.778069 验证集 准确率: 0.806667 \n",
      "Epoch 45 训练集 Loss: 0.424556 训练集 准确率: 0.900000 验证集 Loss: 0.771136 验证集 准确率: 0.806667 \n",
      "Epoch 46 训练集 Loss: 0.451788 训练集 准确率: 0.914286 验证集 Loss: 0.764711 验证集 准确率: 0.806667 \n",
      "Epoch 47 训练集 Loss: 0.376148 训练集 准确率: 0.942857 验证集 Loss: 0.758630 验证集 准确率: 0.816667 \n",
      "Epoch 48 训练集 Loss: 0.455592 训练集 准确率: 0.900000 验证集 Loss: 0.753668 验证集 准确率: 0.813333 \n",
      "Epoch 49 训练集 Loss: 0.435480 训练集 准确率: 0.928571 验证集 Loss: 0.749360 验证集 准确率: 0.810000 \n",
      "Epoch 50 训练集 Loss: 0.477866 训练集 准确率: 0.878571 验证集 Loss: 0.745190 验证集 准确率: 0.810000 \n",
      "Epoch 51 训练集 Loss: 0.381433 训练集 准确率: 0.892857 验证集 Loss: 0.741030 验证集 准确率: 0.810000 \n",
      "Epoch 52 训练集 Loss: 0.370906 训练集 准确率: 0.921429 验证集 Loss: 0.736214 验证集 准确率: 0.810000 \n",
      "Epoch 53 训练集 Loss: 0.392222 训练集 准确率: 0.928571 验证集 Loss: 0.731057 验证集 准确率: 0.806667 \n",
      "Epoch 54 训练集 Loss: 0.343932 训练集 准确率: 0.942857 验证集 Loss: 0.726550 验证集 准确率: 0.806667 \n",
      "Epoch 55 训练集 Loss: 0.444507 训练集 准确率: 0.907143 验证集 Loss: 0.724969 验证集 准确率: 0.806667 \n",
      "Epoch 56 训练集 Loss: 0.373629 训练集 准确率: 0.900000 验证集 Loss: 0.723462 验证集 准确率: 0.806667 \n",
      "Epoch 57 训练集 Loss: 0.395883 训练集 准确率: 0.921429 验证集 Loss: 0.721807 验证集 准确率: 0.810000 \n",
      "Epoch 58 训练集 Loss: 0.282726 训练集 准确率: 0.935714 验证集 Loss: 0.719800 验证集 准确率: 0.810000 \n",
      "Epoch 59 训练集 Loss: 0.381357 训练集 准确率: 0.914286 验证集 Loss: 0.717618 验证集 准确率: 0.816667 \n",
      "Epoch 60 训练集 Loss: 0.411121 训练集 准确率: 0.885714 验证集 Loss: 0.715071 验证集 准确率: 0.816667 \n",
      "Epoch 61 训练集 Loss: 0.386662 训练集 准确率: 0.914286 验证集 Loss: 0.712152 验证集 准确率: 0.816667 \n",
      "Epoch 62 训练集 Loss: 0.316411 训练集 准确率: 0.921429 验证集 Loss: 0.709193 验证集 准确率: 0.820000 \n",
      "Epoch 63 训练集 Loss: 0.345847 训练集 准确率: 0.935714 验证集 Loss: 0.706101 验证集 准确率: 0.816667 \n",
      "Epoch 64 训练集 Loss: 0.348001 训练集 准确率: 0.928571 验证集 Loss: 0.703154 验证集 准确率: 0.816667 \n",
      "Epoch 65 训练集 Loss: 0.352127 训练集 准确率: 0.907143 验证集 Loss: 0.701061 验证集 准确率: 0.816667 \n",
      "Epoch 66 训练集 Loss: 0.230488 训练集 准确率: 0.950000 验证集 Loss: 0.698783 验证集 准确率: 0.820000 \n",
      "Epoch 67 训练集 Loss: 0.325139 训练集 准确率: 0.942857 验证集 Loss: 0.697409 验证集 准确率: 0.823333 \n",
      "Epoch 68 训练集 Loss: 0.303118 训练集 准确率: 0.900000 验证集 Loss: 0.696523 验证集 准确率: 0.823333 \n",
      "Epoch 69 训练集 Loss: 0.319011 训练集 准确率: 0.942857 验证集 Loss: 0.695808 验证集 准确率: 0.823333 \n",
      "Epoch 70 训练集 Loss: 0.330755 训练集 准确率: 0.907143 验证集 Loss: 0.694443 验证集 准确率: 0.820000 \n",
      "Epoch 71 训练集 Loss: 0.232695 训练集 准确率: 0.971429 验证集 Loss: 0.692933 验证集 准确率: 0.823333 \n",
      "Epoch 72 训练集 Loss: 0.330877 训练集 准确率: 0.950000 验证集 Loss: 0.691294 验证集 准确率: 0.820000 \n",
      "Epoch 73 训练集 Loss: 0.284746 训练集 准确率: 0.935714 验证集 Loss: 0.690258 验证集 准确率: 0.820000 \n",
      "Epoch 74 训练集 Loss: 0.327324 训练集 准确率: 0.942857 验证集 Loss: 0.689469 验证集 准确率: 0.820000 \n",
      "Epoch 75 训练集 Loss: 0.325140 训练集 准确率: 0.942857 验证集 Loss: 0.688399 验证集 准确率: 0.820000 \n",
      "Epoch 76 训练集 Loss: 0.272639 训练集 准确率: 0.957143 验证集 Loss: 0.686970 验证集 准确率: 0.820000 \n",
      "Epoch 77 训练集 Loss: 0.377827 训练集 准确率: 0.871429 验证集 Loss: 0.685771 验证集 准确率: 0.820000 \n",
      "Epoch 78 训练集 Loss: 0.311387 训练集 准确率: 0.907143 验证集 Loss: 0.685086 验证集 准确率: 0.820000 \n",
      "Epoch 79 训练集 Loss: 0.323086 训练集 准确率: 0.907143 验证集 Loss: 0.684026 验证集 准确率: 0.820000 \n",
      "Epoch 80 训练集 Loss: 0.255310 训练集 准确率: 0.950000 验证集 Loss: 0.683108 验证集 准确率: 0.820000 \n",
      "Epoch 81 训练集 Loss: 0.274767 训练集 准确率: 0.964286 验证集 Loss: 0.681924 验证集 准确率: 0.820000 \n",
      "Epoch 82 训练集 Loss: 0.355080 训练集 准确率: 0.928571 验证集 Loss: 0.682271 验证集 准确率: 0.823333 \n",
      "Epoch 83 训练集 Loss: 0.281152 训练集 准确率: 0.942857 验证集 Loss: 0.682314 验证集 准确率: 0.820000 \n",
      "Epoch 84 训练集 Loss: 0.261498 训练集 准确率: 0.985714 验证集 Loss: 0.681905 验证集 准确率: 0.820000 \n",
      "Epoch 85 训练集 Loss: 0.310963 训练集 准确率: 0.935714 验证集 Loss: 0.680930 验证集 准确率: 0.820000 \n",
      "Epoch 86 训练集 Loss: 0.309256 训练集 准确率: 0.907143 验证集 Loss: 0.680810 验证集 准确率: 0.823333 \n",
      "Epoch 87 训练集 Loss: 0.315868 训练集 准确率: 0.928571 验证集 Loss: 0.680734 验证集 准确率: 0.823333 \n",
      "Epoch 88 训练集 Loss: 0.251364 训练集 准确率: 0.957143 验证集 Loss: 0.680080 验证集 准确率: 0.823333 \n",
      "Epoch 89 训练集 Loss: 0.294482 训练集 准确率: 0.935714 验证集 Loss: 0.678838 验证集 准确率: 0.823333 \n",
      "Epoch 90 训练集 Loss: 0.268900 训练集 准确率: 0.957143 验证集 Loss: 0.678930 验证集 准确率: 0.826667 \n",
      "Epoch 91 训练集 Loss: 0.288490 训练集 准确率: 0.942857 验证集 Loss: 0.679098 验证集 准确率: 0.826667 \n",
      "Epoch 92 训练集 Loss: 0.247155 训练集 准确率: 0.928571 验证集 Loss: 0.679058 验证集 准确率: 0.826667 \n",
      "Epoch 93 训练集 Loss: 0.284489 训练集 准确率: 0.921429 验证集 Loss: 0.679156 验证集 准确率: 0.826667 \n",
      "Epoch 94 训练集 Loss: 0.238942 训练集 准确率: 0.950000 验证集 Loss: 0.679273 验证集 准确率: 0.826667 \n",
      "Epoch 95 训练集 Loss: 0.274584 训练集 准确率: 0.942857 验证集 Loss: 0.678823 验证集 准确率: 0.823333 \n",
      "Epoch 96 训练集 Loss: 0.243170 训练集 准确率: 0.950000 验证集 Loss: 0.677901 验证集 准确率: 0.823333 \n",
      "Epoch 97 训练集 Loss: 0.323555 训练集 准确率: 0.914286 验证集 Loss: 0.676806 验证集 准确率: 0.823333 \n",
      "Epoch 98 训练集 Loss: 0.268776 训练集 准确率: 0.935714 验证集 Loss: 0.675846 验证集 准确率: 0.823333 \n",
      "Epoch 99 训练集 Loss: 0.334842 训练集 准确率: 0.900000 验证集 Loss: 0.675238 验证集 准确率: 0.823333 \n",
      "Epoch 100 训练集 Loss: 0.319142 训练集 准确率: 0.921429 验证集 Loss: 0.674682 验证集 准确率: 0.823333 \n",
      "Epoch 101 训练集 Loss: 0.291038 训练集 准确率: 0.921429 验证集 Loss: 0.674291 验证集 准确率: 0.816667 \n",
      "Epoch 102 训练集 Loss: 0.236000 训练集 准确率: 0.957143 验证集 Loss: 0.673957 验证集 准确率: 0.816667 \n",
      "Epoch 103 训练集 Loss: 0.274021 训练集 准确率: 0.928571 验证集 Loss: 0.674378 验证集 准确率: 0.816667 \n",
      "Epoch 104 训练集 Loss: 0.262530 训练集 准确率: 0.950000 验证集 Loss: 0.674622 验证集 准确率: 0.816667 \n",
      "Epoch 105 训练集 Loss: 0.265098 训练集 准确率: 0.942857 验证集 Loss: 0.674902 验证集 准确率: 0.816667 \n",
      "Epoch 106 训练集 Loss: 0.234357 训练集 准确率: 0.935714 验证集 Loss: 0.674322 验证集 准确率: 0.816667 \n",
      "Epoch 107 训练集 Loss: 0.217521 训练集 准确率: 0.964286 验证集 Loss: 0.673812 验证集 准确率: 0.816667 \n",
      "Epoch 108 训练集 Loss: 0.397332 训练集 准确率: 0.892857 验证集 Loss: 0.675534 验证集 准确率: 0.816667 \n",
      "Epoch 109 训练集 Loss: 0.284660 训练集 准确率: 0.914286 验证集 Loss: 0.676872 验证集 准确率: 0.816667 \n",
      "Epoch 110 训练集 Loss: 0.365226 训练集 准确率: 0.914286 验证集 Loss: 0.679447 验证集 准确率: 0.823333 \n",
      "Epoch 111 训练集 Loss: 0.266467 训练集 准确率: 0.935714 验证集 Loss: 0.681893 验证集 准确率: 0.820000 \n",
      "Epoch 112 训练集 Loss: 0.257355 训练集 准确率: 0.964286 验证集 Loss: 0.683452 验证集 准确率: 0.820000 \n",
      "Epoch 113 训练集 Loss: 0.239811 训练集 准确率: 0.964286 验证集 Loss: 0.684619 验证集 准确率: 0.820000 \n",
      "Epoch 114 训练集 Loss: 0.258633 训练集 准确率: 0.935714 验证集 Loss: 0.686649 验证集 准确率: 0.816667 \n",
      "Epoch 115 训练集 Loss: 0.233056 训练集 准确率: 0.942857 验证集 Loss: 0.688377 验证集 准确率: 0.816667 \n",
      "Epoch 116 训练集 Loss: 0.208005 训练集 准确率: 0.957143 验证集 Loss: 0.689426 验证集 准确率: 0.820000 \n",
      "Epoch 117 训练集 Loss: 0.231505 训练集 准确率: 0.950000 验证集 Loss: 0.690217 验证集 准确率: 0.820000 \n",
      "Epoch 118 训练集 Loss: 0.231167 训练集 准确率: 0.957143 验证集 Loss: 0.690658 验证集 准确率: 0.820000 \n",
      "Epoch 119 训练集 Loss: 0.253854 训练集 准确率: 0.928571 验证集 Loss: 0.689735 验证集 准确率: 0.816667 \n",
      "Epoch 120 训练集 Loss: 0.259155 训练集 准确率: 0.935714 验证集 Loss: 0.687292 验证集 准确率: 0.816667 \n",
      "Epoch 121 训练集 Loss: 0.232718 训练集 准确率: 0.950000 验证集 Loss: 0.684566 验证集 准确率: 0.816667 \n",
      "Epoch 122 训练集 Loss: 0.244708 训练集 准确率: 0.942857 验证集 Loss: 0.682274 验证集 准确率: 0.816667 \n",
      "Epoch 123 训练集 Loss: 0.203775 训练集 准确率: 0.964286 验证集 Loss: 0.680352 验证集 准确率: 0.820000 \n",
      "Epoch 124 训练集 Loss: 0.242994 训练集 准确率: 0.957143 验证集 Loss: 0.678393 验证集 准确率: 0.820000 \n",
      "Epoch 125 训练集 Loss: 0.216884 训练集 准确率: 0.942857 验证集 Loss: 0.676857 验证集 准确率: 0.820000 \n",
      "Epoch 126 训练集 Loss: 0.184258 训练集 准确率: 0.985714 验证集 Loss: 0.675487 验证集 准确率: 0.820000 \n",
      "Epoch 127 训练集 Loss: 0.285566 训练集 准确率: 0.950000 验证集 Loss: 0.674464 验证集 准确率: 0.820000 \n",
      "Epoch 128 训练集 Loss: 0.253459 训练集 准确率: 0.935714 验证集 Loss: 0.673321 验证集 准确率: 0.816667 \n",
      "Epoch 129 训练集 Loss: 0.203550 训练集 准确率: 0.957143 验证集 Loss: 0.672335 验证集 准确率: 0.816667 \n",
      "Epoch 130 训练集 Loss: 0.304375 训练集 准确率: 0.907143 验证集 Loss: 0.671796 验证集 准确率: 0.816667 \n",
      "Epoch 131 训练集 Loss: 0.209469 训练集 准确率: 0.971429 验证集 Loss: 0.671776 验证集 准确率: 0.820000 \n",
      "Epoch 132 训练集 Loss: 0.227574 训练集 准确率: 0.935714 验证集 Loss: 0.673036 验证集 准确率: 0.820000 \n",
      "Epoch 133 训练集 Loss: 0.211326 训练集 准确率: 0.964286 验证集 Loss: 0.673882 验证集 准确率: 0.816667 \n",
      "Epoch 134 训练集 Loss: 0.256384 训练集 准确率: 0.942857 验证集 Loss: 0.674909 验证集 准确率: 0.816667 \n",
      "Epoch 135 训练集 Loss: 0.200453 训练集 准确率: 0.950000 验证集 Loss: 0.675112 验证集 准确率: 0.816667 \n",
      "Epoch 136 训练集 Loss: 0.251789 训练集 准确率: 0.942857 验证集 Loss: 0.675186 验证集 准确率: 0.816667 \n",
      "Epoch 137 训练集 Loss: 0.251500 训练集 准确率: 0.928571 验证集 Loss: 0.674884 验证集 准确率: 0.816667 \n",
      "Epoch 138 训练集 Loss: 0.242210 训练集 准确率: 0.935714 验证集 Loss: 0.674148 验证集 准确率: 0.816667 \n",
      "Epoch 139 训练集 Loss: 0.234647 训练集 准确率: 0.942857 验证集 Loss: 0.672307 验证集 准确率: 0.816667 \n",
      "Epoch 140 训练集 Loss: 0.165614 训练集 准确率: 0.978571 验证集 Loss: 0.670062 验证集 准确率: 0.816667 \n",
      "Epoch 141 训练集 Loss: 0.212826 训练集 准确率: 0.957143 验证集 Loss: 0.668254 验证集 准确率: 0.816667 \n",
      "Epoch 142 训练集 Loss: 0.199729 训练集 准确率: 0.957143 验证集 Loss: 0.666797 验证集 准确率: 0.816667 \n",
      "Epoch 143 训练集 Loss: 0.204305 训练集 准确率: 0.957143 验证集 Loss: 0.665547 验证集 准确率: 0.816667 \n",
      "Epoch 144 训练集 Loss: 0.192628 训练集 准确率: 0.964286 验证集 Loss: 0.663772 验证集 准确率: 0.823333 \n",
      "Epoch 145 训练集 Loss: 0.227717 训练集 准确率: 0.935714 验证集 Loss: 0.662015 验证集 准确率: 0.823333 \n",
      "Epoch 146 训练集 Loss: 0.205916 训练集 准确率: 0.971429 验证集 Loss: 0.660020 验证集 准确率: 0.823333 \n",
      "Epoch 147 训练集 Loss: 0.262283 训练集 准确率: 0.935714 验证集 Loss: 0.658512 验证集 准确率: 0.826667 \n",
      "Epoch 148 训练集 Loss: 0.232800 训练集 准确率: 0.942857 验证集 Loss: 0.658364 验证集 准确率: 0.826667 \n",
      "Epoch 149 训练集 Loss: 0.242422 训练集 准确率: 0.921429 验证集 Loss: 0.659051 验证集 准确率: 0.823333 \n",
      "Epoch 150 训练集 Loss: 0.276751 训练集 准确率: 0.907143 验证集 Loss: 0.660379 验证集 准确率: 0.820000 \n",
      "Epoch 151 训练集 Loss: 0.253744 训练集 准确率: 0.914286 验证集 Loss: 0.661714 验证集 准确率: 0.816667 \n",
      "Epoch 152 训练集 Loss: 0.192912 训练集 准确率: 0.971429 验证集 Loss: 0.662715 验证集 准确率: 0.820000 \n",
      "Epoch 153 训练集 Loss: 0.271588 训练集 准确率: 0.935714 验证集 Loss: 0.663665 验证集 准确率: 0.816667 \n",
      "Epoch 154 训练集 Loss: 0.223269 训练集 准确率: 0.964286 验证集 Loss: 0.664203 验证集 准确率: 0.816667 \n",
      "Epoch 155 训练集 Loss: 0.206680 训练集 准确率: 0.950000 验证集 Loss: 0.664854 验证集 准确率: 0.813333 \n",
      "Epoch 156 训练集 Loss: 0.244946 训练集 准确率: 0.935714 验证集 Loss: 0.665422 验证集 准确率: 0.816667 \n",
      "Epoch 157 训练集 Loss: 0.207959 训练集 准确率: 0.964286 验证集 Loss: 0.665380 验证集 准确率: 0.816667 \n",
      "Epoch 158 训练集 Loss: 0.248497 训练集 准确率: 0.942857 验证集 Loss: 0.665493 验证集 准确率: 0.816667 \n",
      "Epoch 159 训练集 Loss: 0.256405 训练集 准确率: 0.950000 验证集 Loss: 0.665381 验证集 准确率: 0.816667 \n",
      "Epoch 160 训练集 Loss: 0.250510 训练集 准确率: 0.921429 验证集 Loss: 0.665192 验证集 准确率: 0.816667 \n",
      "Epoch 161 训练集 Loss: 0.211398 训练集 准确率: 0.971429 验证集 Loss: 0.665612 验证集 准确率: 0.816667 \n",
      "Epoch 162 训练集 Loss: 0.183720 训练集 准确率: 0.950000 验证集 Loss: 0.665843 验证集 准确率: 0.816667 \n",
      "Epoch 163 训练集 Loss: 0.210656 训练集 准确率: 0.935714 验证集 Loss: 0.665725 验证集 准确率: 0.820000 \n",
      "Epoch 164 训练集 Loss: 0.207330 训练集 准确率: 0.978571 验证集 Loss: 0.664822 验证集 准确率: 0.820000 \n",
      "Epoch 165 训练集 Loss: 0.221647 训练集 准确率: 0.935714 验证集 Loss: 0.663600 验证集 准确率: 0.823333 \n",
      "Epoch 166 训练集 Loss: 0.213231 训练集 准确率: 0.957143 验证集 Loss: 0.662483 验证集 准确率: 0.820000 \n",
      "Epoch 167 训练集 Loss: 0.206570 训练集 准确率: 0.928571 验证集 Loss: 0.660772 验证集 准确率: 0.820000 \n",
      "Epoch 168 训练集 Loss: 0.193640 训练集 准确率: 0.964286 验证集 Loss: 0.658850 验证集 准确率: 0.816667 \n",
      "Epoch 169 训练集 Loss: 0.198082 训练集 准确率: 0.935714 验证集 Loss: 0.657411 验证集 准确率: 0.820000 \n",
      "Epoch 170 训练集 Loss: 0.283862 训练集 准确率: 0.907143 验证集 Loss: 0.656926 验证集 准确率: 0.820000 \n",
      "Epoch 171 训练集 Loss: 0.234124 训练集 准确率: 0.942857 验证集 Loss: 0.657143 验证集 准确率: 0.823333 \n",
      "Epoch 172 训练集 Loss: 0.169684 训练集 准确率: 0.971429 验证集 Loss: 0.657497 验证集 准确率: 0.823333 \n",
      "Epoch 173 训练集 Loss: 0.216692 训练集 准确率: 0.957143 验证集 Loss: 0.657234 验证集 准确率: 0.823333 \n",
      "Epoch 174 训练集 Loss: 0.223288 训练集 准确率: 0.957143 验证集 Loss: 0.656892 验证集 准确率: 0.823333 \n",
      "Epoch 175 训练集 Loss: 0.206888 训练集 准确率: 0.964286 验证集 Loss: 0.656728 验证集 准确率: 0.823333 \n",
      "Epoch 176 训练集 Loss: 0.220407 训练集 准确率: 0.942857 验证集 Loss: 0.656410 验证集 准确率: 0.823333 \n",
      "Epoch 177 训练集 Loss: 0.210632 训练集 准确率: 0.971429 验证集 Loss: 0.655503 验证集 准确率: 0.823333 \n",
      "Epoch 178 训练集 Loss: 0.169490 训练集 准确率: 0.971429 验证集 Loss: 0.654903 验证集 准确率: 0.823333 \n",
      "Epoch 179 训练集 Loss: 0.174311 训练集 准确率: 0.971429 验证集 Loss: 0.655198 验证集 准确率: 0.823333 \n",
      "Epoch 180 训练集 Loss: 0.222077 训练集 准确率: 0.942857 验证集 Loss: 0.655686 验证集 准确率: 0.823333 \n",
      "Epoch 181 训练集 Loss: 0.155872 训练集 准确率: 0.964286 验证集 Loss: 0.656098 验证集 准确率: 0.820000 \n",
      "Epoch 182 训练集 Loss: 0.200983 训练集 准确率: 0.978571 验证集 Loss: 0.656917 验证集 准确率: 0.823333 \n",
      "Epoch 183 训练集 Loss: 0.193439 训练集 准确率: 0.942857 验证集 Loss: 0.657632 验证集 准确率: 0.823333 \n",
      "Epoch 184 训练集 Loss: 0.248091 训练集 准确率: 0.928571 验证集 Loss: 0.659010 验证集 准确率: 0.816667 \n",
      "Epoch 185 训练集 Loss: 0.196777 训练集 准确率: 0.957143 验证集 Loss: 0.660266 验证集 准确率: 0.820000 \n",
      "Epoch 186 训练集 Loss: 0.235672 训练集 准确率: 0.950000 验证集 Loss: 0.660976 验证集 准确率: 0.823333 \n",
      "Epoch 187 训练集 Loss: 0.208317 训练集 准确率: 0.964286 验证集 Loss: 0.659964 验证集 准确率: 0.823333 \n",
      "Epoch 188 训练集 Loss: 0.214142 训练集 准确率: 0.964286 验证集 Loss: 0.659123 验证集 准确率: 0.820000 \n",
      "Epoch 189 训练集 Loss: 0.197633 训练集 准确率: 0.950000 验证集 Loss: 0.658366 验证集 准确率: 0.816667 \n",
      "Epoch 190 训练集 Loss: 0.248493 训练集 准确率: 0.942857 验证集 Loss: 0.658468 验证集 准确率: 0.816667 \n",
      "Epoch 191 训练集 Loss: 0.245795 训练集 准确率: 0.935714 验证集 Loss: 0.658545 验证集 准确率: 0.816667 \n",
      "Epoch 192 训练集 Loss: 0.226041 训练集 准确率: 0.942857 验证集 Loss: 0.659562 验证集 准确率: 0.816667 \n",
      "Epoch 193 训练集 Loss: 0.232502 训练集 准确率: 0.942857 验证集 Loss: 0.659941 验证集 准确率: 0.816667 \n",
      "Epoch 194 训练集 Loss: 0.166072 训练集 准确率: 0.971429 验证集 Loss: 0.659449 验证集 准确率: 0.816667 \n",
      "Epoch 195 训练集 Loss: 0.257833 训练集 准确率: 0.935714 验证集 Loss: 0.659614 验证集 准确率: 0.816667 \n",
      "Epoch 196 训练集 Loss: 0.245194 训练集 准确率: 0.928571 验证集 Loss: 0.660682 验证集 准确率: 0.816667 \n",
      "Epoch 197 训练集 Loss: 0.264809 训练集 准确率: 0.928571 验证集 Loss: 0.661659 验证集 准确率: 0.816667 \n",
      "Epoch 198 训练集 Loss: 0.248865 训练集 准确率: 0.928571 验证集 Loss: 0.665170 验证集 准确率: 0.816667 \n",
      "Epoch 199 训练集 Loss: 0.229182 训练集 准确率: 0.928571 验证集 Loss: 0.668449 验证集 准确率: 0.813333 \n",
      "Epoch 200 训练集 Loss: 0.170295 训练集 准确率: 0.971429 验证集 Loss: 0.671314 验证集 准确率: 0.813333 \n",
      "Epoch 201 训练集 Loss: 0.176243 训练集 准确率: 0.971429 验证集 Loss: 0.673704 验证集 准确率: 0.810000 \n",
      "Epoch 202 训练集 Loss: 0.132760 训练集 准确率: 0.978571 验证集 Loss: 0.675041 验证集 准确率: 0.810000 \n",
      "Epoch 203 训练集 Loss: 0.171783 训练集 准确率: 0.971429 验证集 Loss: 0.675062 验证集 准确率: 0.810000 \n",
      "Epoch 204 训练集 Loss: 0.224505 训练集 准确率: 0.957143 验证集 Loss: 0.675234 验证集 准确率: 0.813333 \n",
      "Epoch 205 训练集 Loss: 0.221260 训练集 准确率: 0.942857 验证集 Loss: 0.674641 验证集 准确率: 0.813333 \n",
      "Epoch 206 训练集 Loss: 0.173275 训练集 准确率: 0.964286 验证集 Loss: 0.673115 验证集 准确率: 0.813333 \n",
      "Epoch 207 训练集 Loss: 0.171381 训练集 准确率: 0.971429 验证集 Loss: 0.671572 验证集 准确率: 0.813333 \n",
      "Epoch 208 训练集 Loss: 0.173610 训练集 准确率: 0.992857 验证集 Loss: 0.669376 验证集 准确率: 0.813333 \n",
      "Epoch 209 训练集 Loss: 0.186643 训练集 准确率: 0.942857 验证集 Loss: 0.665478 验证集 准确率: 0.813333 \n",
      "Epoch 210 训练集 Loss: 0.237924 训练集 准确率: 0.921429 验证集 Loss: 0.662092 验证集 准确率: 0.813333 \n",
      "Epoch 211 训练集 Loss: 0.169190 训练集 准确率: 0.964286 验证集 Loss: 0.659446 验证集 准确率: 0.813333 \n",
      "Epoch 212 训练集 Loss: 0.173280 训练集 准确率: 0.964286 验证集 Loss: 0.656931 验证集 准确率: 0.813333 \n",
      "Epoch 213 训练集 Loss: 0.196372 训练集 准确率: 0.964286 验证集 Loss: 0.654490 验证集 准确率: 0.813333 \n",
      "Epoch 214 训练集 Loss: 0.241121 训练集 准确率: 0.921429 验证集 Loss: 0.653223 验证集 准确率: 0.813333 \n",
      "Epoch 215 训练集 Loss: 0.229704 训练集 准确率: 0.942857 验证集 Loss: 0.652715 验证集 准确率: 0.813333 \n",
      "Epoch 216 训练集 Loss: 0.178234 训练集 准确率: 0.957143 验证集 Loss: 0.651954 验证集 准确率: 0.813333 \n",
      "Epoch 217 训练集 Loss: 0.176517 训练集 准确率: 0.964286 验证集 Loss: 0.651333 验证集 准确率: 0.813333 \n",
      "Epoch 218 训练集 Loss: 0.171418 训练集 准确率: 0.964286 验证集 Loss: 0.649870 验证集 准确率: 0.813333 \n",
      "Epoch 219 训练集 Loss: 0.215133 训练集 准确率: 0.935714 验证集 Loss: 0.648682 验证集 准确率: 0.813333 \n",
      "Epoch 220 训练集 Loss: 0.190619 训练集 准确率: 0.964286 验证集 Loss: 0.647550 验证集 准确率: 0.813333 \n",
      "Epoch 221 训练集 Loss: 0.180684 训练集 准确率: 0.964286 验证集 Loss: 0.647024 验证集 准确率: 0.813333 \n",
      "Epoch 222 训练集 Loss: 0.202154 训练集 准确率: 0.928571 验证集 Loss: 0.647238 验证集 准确率: 0.813333 \n",
      "Epoch 223 训练集 Loss: 0.253066 训练集 准确率: 0.900000 验证集 Loss: 0.648416 验证集 准确率: 0.813333 \n",
      "Epoch 224 训练集 Loss: 0.212023 训练集 准确率: 0.942857 验证集 Loss: 0.650507 验证集 准确率: 0.813333 \n",
      "Epoch 225 训练集 Loss: 0.235304 训练集 准确率: 0.942857 验证集 Loss: 0.651780 验证集 准确率: 0.813333 \n",
      "Epoch 226 训练集 Loss: 0.222383 训练集 准确率: 0.928571 验证集 Loss: 0.652816 验证集 准确率: 0.816667 \n",
      "Epoch 227 训练集 Loss: 0.218754 训练集 准确率: 0.928571 验证集 Loss: 0.653889 验证集 准确率: 0.813333 \n",
      "Epoch 228 训练集 Loss: 0.170741 训练集 准确率: 0.964286 验证集 Loss: 0.654272 验证集 准确率: 0.813333 \n",
      "Epoch 229 训练集 Loss: 0.277871 训练集 准确率: 0.900000 验证集 Loss: 0.654748 验证集 准确率: 0.813333 \n",
      "Epoch 230 训练集 Loss: 0.220784 训练集 准确率: 0.914286 验证集 Loss: 0.655326 验证集 准确率: 0.810000 \n",
      "Epoch 231 训练集 Loss: 0.166961 训练集 准确率: 0.971429 验证集 Loss: 0.656812 验证集 准确率: 0.810000 \n",
      "Epoch 232 训练集 Loss: 0.193500 训练集 准确率: 0.957143 验证集 Loss: 0.658026 验证集 准确率: 0.810000 \n",
      "Epoch 233 训练集 Loss: 0.175889 训练集 准确率: 0.971429 验证集 Loss: 0.658758 验证集 准确率: 0.820000 \n",
      "Epoch 234 训练集 Loss: 0.211330 训练集 准确率: 0.942857 验证集 Loss: 0.659352 验证集 准确率: 0.820000 \n",
      "Epoch 235 训练集 Loss: 0.155051 训练集 准确率: 0.985714 验证集 Loss: 0.660220 验证集 准确率: 0.820000 \n",
      "Epoch 236 训练集 Loss: 0.217655 训练集 准确率: 0.942857 验证集 Loss: 0.660622 验证集 准确率: 0.820000 \n",
      "Epoch 237 训练集 Loss: 0.173268 训练集 准确率: 0.950000 验证集 Loss: 0.660398 验证集 准确率: 0.820000 \n",
      "Epoch 238 训练集 Loss: 0.196501 训练集 准确率: 0.942857 验证集 Loss: 0.659557 验证集 准确率: 0.820000 \n",
      "Epoch 239 训练集 Loss: 0.208151 训练集 准确率: 0.935714 验证集 Loss: 0.659098 验证集 准确率: 0.816667 \n",
      "Cora数据集 结果\n",
      "最好验证集 第 90 Epoch 准确率 0.826667\n",
      "对应测试集合 准确率: 0.800000\n"
     ]
    }
   ],
   "source": [
    "# (GPU版) 可以自己调整超参数，比如学习率，epoch数，看看结果变化如何\n",
    "!python check_on_cora.py  --epoch 240 --hidden_size 18 --learning_rate 0.01 --dropout 0.5 --use_cuda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始训练 Cora数据集 200 Epoch\n",
      "Epoch 0 训练集 Loss: 1.950623 训练集 准确率: 0.092857 验证集 Loss: 1.926601 验证集 准确率: 0.366667 \n",
      "Epoch 1 训练集 Loss: 1.913136 训练集 准确率: 0.392857 验证集 Loss: 1.902471 验证集 准确率: 0.446667 \n",
      "Epoch 2 训练集 Loss: 1.878004 训练集 准确率: 0.414286 验证集 Loss: 1.876760 验证集 准确率: 0.493333 \n",
      "Epoch 3 训练集 Loss: 1.850238 训练集 准确率: 0.478571 验证集 Loss: 1.847752 验证集 准确率: 0.546667 \n",
      "Epoch 4 训练集 Loss: 1.805246 训练集 准确率: 0.528571 验证集 Loss: 1.818312 验证集 准确率: 0.576667 \n",
      "Epoch 5 训练集 Loss: 1.738063 训练集 准确率: 0.600000 验证集 Loss: 1.787955 验证集 准确率: 0.586667 \n",
      "Epoch 6 训练集 Loss: 1.717066 训练集 准确率: 0.535714 验证集 Loss: 1.757337 验证集 准确率: 0.593333 \n",
      "Epoch 7 训练集 Loss: 1.661718 训练集 准确率: 0.578571 验证集 Loss: 1.725972 验证集 准确率: 0.590000 \n",
      "Epoch 8 训练集 Loss: 1.608576 训练集 准确率: 0.628571 验证集 Loss: 1.693895 验证集 准确率: 0.583333 \n",
      "Epoch 9 训练集 Loss: 1.540263 训练集 准确率: 0.650000 验证集 Loss: 1.660291 验证集 准确率: 0.596667 \n",
      "Epoch 10 训练集 Loss: 1.541039 训练集 准确率: 0.578571 验证集 Loss: 1.626335 验证集 准确率: 0.603333 \n",
      "Epoch 11 训练集 Loss: 1.510315 训练集 准确率: 0.585714 验证集 Loss: 1.592083 验证集 准确率: 0.623333 \n",
      "Epoch 12 训练集 Loss: 1.418939 训练集 准确率: 0.657143 验证集 Loss: 1.557274 验证集 准确率: 0.633333 \n",
      "Epoch 13 训练集 Loss: 1.384813 训练集 准确率: 0.614286 验证集 Loss: 1.522998 验证集 准确率: 0.650000 \n",
      "Epoch 14 训练集 Loss: 1.350470 训练集 准确率: 0.685714 验证集 Loss: 1.488622 验证集 准确率: 0.653333 \n",
      "Epoch 15 训练集 Loss: 1.301087 训练集 准确率: 0.621429 验证集 Loss: 1.453972 验证集 准确率: 0.670000 \n",
      "Epoch 16 训练集 Loss: 1.310680 训练集 准确率: 0.642857 验证集 Loss: 1.419776 验证集 准确率: 0.686667 \n",
      "Epoch 17 训练集 Loss: 1.212282 训练集 准确率: 0.707143 验证集 Loss: 1.385725 验证集 准确率: 0.696667 \n",
      "Epoch 18 训练集 Loss: 1.157757 训练集 准确率: 0.750000 验证集 Loss: 1.351874 验证集 准确率: 0.713333 \n",
      "Epoch 19 训练集 Loss: 1.169968 训练集 准确率: 0.735714 验证集 Loss: 1.318855 验证集 准确率: 0.726667 \n",
      "Epoch 20 训练集 Loss: 1.104076 训练集 准确率: 0.764286 验证集 Loss: 1.286711 验证集 准确率: 0.730000 \n",
      "Epoch 21 训练集 Loss: 1.111854 训练集 准确率: 0.707143 验证集 Loss: 1.255810 验证集 准确率: 0.733333 \n",
      "Epoch 22 训练集 Loss: 1.031445 训练集 准确率: 0.728571 验证集 Loss: 1.226115 验证集 准确率: 0.740000 \n",
      "Epoch 23 训练集 Loss: 0.979442 训练集 准确率: 0.814286 验证集 Loss: 1.197196 验证集 准确率: 0.746667 \n",
      "Epoch 24 训练集 Loss: 0.899842 训练集 准确率: 0.821429 验证集 Loss: 1.168829 验证集 准确率: 0.750000 \n",
      "Epoch 25 训练集 Loss: 0.910365 训练集 准确率: 0.792857 验证集 Loss: 1.141149 验证集 准确率: 0.753333 \n",
      "Epoch 26 训练集 Loss: 0.887242 训练集 准确率: 0.835714 验证集 Loss: 1.114324 验证集 准确率: 0.760000 \n",
      "Epoch 27 训练集 Loss: 0.894061 训练集 准确率: 0.771429 验证集 Loss: 1.089226 验证集 准确率: 0.763333 \n",
      "Epoch 28 训练集 Loss: 0.824963 训练集 准确率: 0.828571 验证集 Loss: 1.065663 验证集 准确率: 0.770000 \n",
      "Epoch 29 训练集 Loss: 0.815048 训练集 准确率: 0.778571 验证集 Loss: 1.043817 验证集 准确率: 0.776667 \n",
      "Epoch 30 训练集 Loss: 0.785125 训练集 准确率: 0.871429 验证集 Loss: 1.024645 验证集 准确率: 0.786667 \n",
      "Epoch 31 训练集 Loss: 0.760171 训练集 准确率: 0.828571 验证集 Loss: 1.007810 验证集 准确率: 0.793333 \n",
      "Epoch 32 训练集 Loss: 0.760794 训练集 准确率: 0.864286 验证集 Loss: 0.991687 验证集 准确率: 0.796667 \n",
      "Epoch 33 训练集 Loss: 0.701363 训练集 准确率: 0.857143 验证集 Loss: 0.976241 验证集 准确率: 0.793333 \n",
      "Epoch 34 训练集 Loss: 0.704829 训练集 准确率: 0.835714 验证集 Loss: 0.961771 验证集 准确率: 0.790000 \n",
      "Epoch 35 训练集 Loss: 0.688381 训练集 准确率: 0.842857 验证集 Loss: 0.947901 验证集 准确率: 0.790000 \n",
      "Epoch 36 训练集 Loss: 0.639035 训练集 准确率: 0.907143 验证集 Loss: 0.936448 验证集 准确率: 0.790000 \n",
      "Epoch 37 训练集 Loss: 0.609703 训练集 准确率: 0.864286 验证集 Loss: 0.925349 验证集 准确率: 0.790000 \n",
      "Epoch 38 训练集 Loss: 0.637288 训练集 准确率: 0.828571 验证集 Loss: 0.913417 验证集 准确率: 0.793333 \n",
      "Epoch 39 训练集 Loss: 0.594989 训练集 准确率: 0.857143 验证集 Loss: 0.900948 验证集 准确率: 0.796667 \n",
      "Epoch 40 训练集 Loss: 0.561503 训练集 准确率: 0.921429 验证集 Loss: 0.888436 验证集 准确率: 0.800000 \n",
      "Epoch 41 训练集 Loss: 0.569294 训练集 准确率: 0.864286 验证集 Loss: 0.876785 验证集 准确率: 0.813333 \n",
      "Epoch 42 训练集 Loss: 0.589000 训练集 准确率: 0.857143 验证集 Loss: 0.865805 验证集 准确率: 0.813333 \n",
      "Epoch 43 训练集 Loss: 0.659359 训练集 准确率: 0.814286 验证集 Loss: 0.855521 验证集 准确率: 0.813333 \n",
      "Epoch 44 训练集 Loss: 0.537470 训练集 准确率: 0.914286 验证集 Loss: 0.845350 验证集 准确率: 0.810000 \n",
      "Epoch 45 训练集 Loss: 0.556084 训练集 准确率: 0.878571 验证集 Loss: 0.835063 验证集 准确率: 0.810000 \n",
      "Epoch 46 训练集 Loss: 0.512008 训练集 准确率: 0.907143 验证集 Loss: 0.825912 验证集 准确率: 0.810000 \n",
      "Epoch 47 训练集 Loss: 0.524014 训练集 准确率: 0.878571 验证集 Loss: 0.817547 验证集 准确率: 0.810000 \n",
      "Epoch 48 训练集 Loss: 0.509162 训练集 准确率: 0.892857 验证集 Loss: 0.809764 验证集 准确率: 0.813333 \n",
      "Epoch 49 训练集 Loss: 0.479823 训练集 准确率: 0.907143 验证集 Loss: 0.803220 验证集 准确率: 0.813333 \n",
      "Epoch 50 训练集 Loss: 0.504968 训练集 准确率: 0.885714 验证集 Loss: 0.797736 验证集 准确率: 0.813333 \n",
      "Epoch 51 训练集 Loss: 0.464105 训练集 准确率: 0.900000 验证集 Loss: 0.793639 验证集 准确率: 0.813333 \n",
      "Epoch 52 训练集 Loss: 0.506884 训练集 准确率: 0.885714 验证集 Loss: 0.789890 验证集 准确率: 0.813333 \n",
      "Epoch 53 训练集 Loss: 0.465837 训练集 准确率: 0.878571 验证集 Loss: 0.786870 验证集 准确率: 0.820000 \n",
      "Epoch 54 训练集 Loss: 0.414751 训练集 准确率: 0.914286 验证集 Loss: 0.783745 验证集 准确率: 0.820000 \n",
      "Epoch 55 训练集 Loss: 0.471892 训练集 准确率: 0.878571 验证集 Loss: 0.780805 验证集 准确率: 0.820000 \n",
      "Epoch 56 训练集 Loss: 0.469891 训练集 准确率: 0.907143 验证集 Loss: 0.777869 验证集 准确率: 0.823333 \n",
      "Epoch 57 训练集 Loss: 0.388070 训练集 准确率: 0.928571 验证集 Loss: 0.774607 验证集 准确率: 0.823333 \n",
      "Epoch 58 训练集 Loss: 0.407309 训练集 准确率: 0.900000 验证集 Loss: 0.771483 验证集 准确率: 0.820000 \n",
      "Epoch 59 训练集 Loss: 0.421812 训练集 准确率: 0.892857 验证集 Loss: 0.768321 验证集 准确率: 0.823333 \n",
      "Epoch 60 训练集 Loss: 0.409155 训练集 准确率: 0.907143 验证集 Loss: 0.765912 验证集 准确率: 0.823333 \n",
      "Epoch 61 训练集 Loss: 0.430835 训练集 准确率: 0.921429 验证集 Loss: 0.764137 验证集 准确率: 0.820000 \n",
      "Epoch 62 训练集 Loss: 0.444116 训练集 准确率: 0.907143 验证集 Loss: 0.762527 验证集 准确率: 0.820000 \n",
      "Epoch 63 训练集 Loss: 0.416226 训练集 准确率: 0.900000 验证集 Loss: 0.760362 验证集 准确率: 0.820000 \n",
      "Epoch 64 训练集 Loss: 0.479927 训练集 准确率: 0.921429 验证集 Loss: 0.757829 验证集 准确率: 0.820000 \n",
      "Epoch 65 训练集 Loss: 0.417165 训练集 准确率: 0.885714 验证集 Loss: 0.755118 验证集 准确率: 0.820000 \n",
      "Epoch 66 训练集 Loss: 0.347351 训练集 准确率: 0.921429 验证集 Loss: 0.752137 验证集 准确率: 0.813333 \n",
      "Epoch 67 训练集 Loss: 0.372105 训练集 准确率: 0.914286 验证集 Loss: 0.748094 验证集 准确率: 0.813333 \n",
      "Epoch 68 训练集 Loss: 0.406044 训练集 准确率: 0.942857 验证集 Loss: 0.744229 验证集 准确率: 0.813333 \n",
      "Epoch 69 训练集 Loss: 0.346298 训练集 准确率: 0.914286 验证集 Loss: 0.740591 验证集 准确率: 0.816667 \n",
      "Epoch 70 训练集 Loss: 0.389587 训练集 准确率: 0.907143 验证集 Loss: 0.737512 验证集 准确率: 0.820000 \n",
      "Epoch 71 训练集 Loss: 0.333161 训练集 准确率: 0.928571 验证集 Loss: 0.735115 验证集 准确率: 0.820000 \n",
      "Epoch 72 训练集 Loss: 0.441249 训练集 准确率: 0.892857 验证集 Loss: 0.732898 验证集 准确率: 0.820000 \n",
      "Epoch 73 训练集 Loss: 0.352981 训练集 准确率: 0.900000 验证集 Loss: 0.730793 验证集 准确率: 0.820000 \n",
      "Epoch 74 训练集 Loss: 0.286247 训练集 准确率: 0.957143 验证集 Loss: 0.728611 验证集 准确率: 0.820000 \n",
      "Epoch 75 训练集 Loss: 0.327608 训练集 准确率: 0.914286 验证集 Loss: 0.726216 验证集 准确率: 0.816667 \n",
      "Epoch 76 训练集 Loss: 0.397530 训练集 准确率: 0.892857 验证集 Loss: 0.723867 验证集 准确率: 0.816667 \n",
      "Epoch 77 训练集 Loss: 0.333961 训练集 准确率: 0.914286 验证集 Loss: 0.721990 验证集 准确率: 0.816667 \n",
      "Epoch 78 训练集 Loss: 0.397628 训练集 准确率: 0.892857 验证集 Loss: 0.720291 验证集 准确率: 0.816667 \n",
      "Epoch 79 训练集 Loss: 0.349228 训练集 准确率: 0.928571 验证集 Loss: 0.719282 验证集 准确率: 0.816667 \n",
      "Epoch 80 训练集 Loss: 0.329049 训练集 准确率: 0.921429 验证集 Loss: 0.718064 验证集 准确率: 0.816667 \n",
      "Epoch 81 训练集 Loss: 0.366373 训练集 准确率: 0.907143 验证集 Loss: 0.717417 验证集 准确率: 0.820000 \n",
      "Epoch 82 训练集 Loss: 0.450725 训练集 准确率: 0.857143 验证集 Loss: 0.716542 验证集 准确率: 0.816667 \n",
      "Epoch 83 训练集 Loss: 0.346355 训练集 准确率: 0.928571 验证集 Loss: 0.715319 验证集 准确率: 0.816667 \n",
      "Epoch 84 训练集 Loss: 0.396767 训练集 准确率: 0.914286 验证集 Loss: 0.713911 验证集 准确率: 0.816667 \n",
      "Epoch 85 训练集 Loss: 0.370869 训练集 准确率: 0.907143 验证集 Loss: 0.713117 验证集 准确率: 0.816667 \n",
      "Epoch 86 训练集 Loss: 0.329755 训练集 准确率: 0.885714 验证集 Loss: 0.713831 验证集 准确率: 0.816667 \n",
      "Epoch 87 训练集 Loss: 0.402032 训练集 准确率: 0.892857 验证集 Loss: 0.714472 验证集 准确率: 0.816667 \n",
      "Epoch 88 训练集 Loss: 0.377679 训练集 准确率: 0.885714 验证集 Loss: 0.714342 验证集 准确率: 0.813333 \n",
      "Epoch 89 训练集 Loss: 0.354782 训练集 准确率: 0.914286 验证集 Loss: 0.713926 验证集 准确率: 0.816667 \n",
      "Epoch 90 训练集 Loss: 0.310785 训练集 准确率: 0.921429 验证集 Loss: 0.713103 验证集 准确率: 0.813333 \n",
      "Epoch 91 训练集 Loss: 0.358933 训练集 准确率: 0.900000 验证集 Loss: 0.712506 验证集 准确率: 0.813333 \n",
      "Epoch 92 训练集 Loss: 0.338027 训练集 准确率: 0.907143 验证集 Loss: 0.712012 验证集 准确率: 0.810000 \n",
      "Epoch 93 训练集 Loss: 0.306573 训练集 准确率: 0.942857 验证集 Loss: 0.711730 验证集 准确率: 0.810000 \n",
      "Epoch 94 训练集 Loss: 0.375940 训练集 准确率: 0.907143 验证集 Loss: 0.711058 验证集 准确率: 0.813333 \n",
      "Epoch 95 训练集 Loss: 0.347394 训练集 准确率: 0.921429 验证集 Loss: 0.710559 验证集 准确率: 0.813333 \n",
      "Epoch 96 训练集 Loss: 0.321565 训练集 准确率: 0.957143 验证集 Loss: 0.709464 验证集 准确率: 0.813333 \n",
      "Epoch 97 训练集 Loss: 0.348540 训练集 准确率: 0.950000 验证集 Loss: 0.708408 验证集 准确率: 0.816667 \n",
      "Epoch 98 训练集 Loss: 0.293390 训练集 准确率: 0.928571 验证集 Loss: 0.707977 验证集 准确率: 0.816667 \n",
      "Epoch 99 训练集 Loss: 0.260111 训练集 准确率: 0.928571 验证集 Loss: 0.707395 验证集 准确率: 0.823333 \n",
      "Epoch 100 训练集 Loss: 0.246191 训练集 准确率: 0.964286 验证集 Loss: 0.706432 验证集 准确率: 0.823333 \n",
      "Epoch 101 训练集 Loss: 0.339050 训练集 准确率: 0.914286 验证集 Loss: 0.705114 验证集 准确率: 0.823333 \n",
      "Epoch 102 训练集 Loss: 0.270059 训练集 准确率: 0.957143 验证集 Loss: 0.704280 验证集 准确率: 0.823333 \n",
      "Epoch 103 训练集 Loss: 0.344695 训练集 准确率: 0.907143 验证集 Loss: 0.704061 验证集 准确率: 0.823333 \n",
      "Epoch 104 训练集 Loss: 0.251543 训练集 准确率: 0.950000 验证集 Loss: 0.704109 验证集 准确率: 0.826667 \n",
      "Epoch 105 训练集 Loss: 0.335902 训练集 准确率: 0.935714 验证集 Loss: 0.704819 验证集 准确率: 0.826667 \n",
      "Epoch 106 训练集 Loss: 0.251957 训练集 准确率: 0.942857 验证集 Loss: 0.705426 验证集 准确率: 0.826667 \n",
      "Epoch 107 训练集 Loss: 0.372964 训练集 准确率: 0.907143 验证集 Loss: 0.706053 验证集 准确率: 0.823333 \n",
      "Epoch 108 训练集 Loss: 0.296616 训练集 准确率: 0.928571 验证集 Loss: 0.706637 验证集 准确率: 0.820000 \n",
      "Epoch 109 训练集 Loss: 0.376928 训练集 准确率: 0.914286 验证集 Loss: 0.707184 验证集 准确率: 0.820000 \n",
      "Epoch 110 训练集 Loss: 0.280550 训练集 准确率: 0.950000 验证集 Loss: 0.707869 验证集 准确率: 0.820000 \n",
      "Epoch 111 训练集 Loss: 0.310225 训练集 准确率: 0.921429 验证集 Loss: 0.707831 验证集 准确率: 0.820000 \n",
      "Epoch 112 训练集 Loss: 0.241446 训练集 准确率: 0.957143 验证集 Loss: 0.707537 验证集 准确率: 0.820000 \n",
      "Epoch 113 训练集 Loss: 0.280715 训练集 准确率: 0.921429 验证集 Loss: 0.706775 验证集 准确率: 0.820000 \n",
      "Epoch 114 训练集 Loss: 0.310789 训练集 准确率: 0.914286 验证集 Loss: 0.706229 验证集 准确率: 0.820000 \n",
      "Epoch 115 训练集 Loss: 0.284576 训练集 准确率: 0.928571 验证集 Loss: 0.706252 验证集 准确率: 0.820000 \n",
      "Epoch 116 训练集 Loss: 0.214539 训练集 准确率: 0.971429 验证集 Loss: 0.706341 验证集 准确率: 0.816667 \n",
      "Epoch 117 训练集 Loss: 0.300276 训练集 准确率: 0.900000 验证集 Loss: 0.707121 验证集 准确率: 0.816667 \n",
      "Epoch 118 训练集 Loss: 0.309071 训练集 准确率: 0.928571 验证集 Loss: 0.707942 验证集 准确率: 0.816667 \n",
      "Epoch 119 训练集 Loss: 0.315392 训练集 准确率: 0.914286 验证集 Loss: 0.709605 验证集 准确率: 0.816667 \n",
      "Epoch 120 训练集 Loss: 0.331356 训练集 准确率: 0.907143 验证集 Loss: 0.710659 验证集 准确率: 0.816667 \n",
      "Epoch 121 训练集 Loss: 0.245441 训练集 准确率: 0.942857 验证集 Loss: 0.713139 验证集 准确率: 0.813333 \n",
      "Epoch 122 训练集 Loss: 0.289382 训练集 准确率: 0.928571 验证集 Loss: 0.715590 验证集 准确率: 0.813333 \n",
      "Epoch 123 训练集 Loss: 0.268639 训练集 准确率: 0.935714 验证集 Loss: 0.717570 验证集 准确率: 0.813333 \n",
      "Epoch 124 训练集 Loss: 0.281323 训练集 准确率: 0.914286 验证集 Loss: 0.719209 验证集 准确率: 0.813333 \n",
      "Epoch 125 训练集 Loss: 0.351942 训练集 准确率: 0.935714 验证集 Loss: 0.719896 验证集 准确率: 0.813333 \n",
      "Epoch 126 训练集 Loss: 0.293685 训练集 准确率: 0.935714 验证集 Loss: 0.719698 验证集 准确率: 0.813333 \n",
      "Epoch 127 训练集 Loss: 0.271724 训练集 准确率: 0.914286 验证集 Loss: 0.718821 验证集 准确率: 0.813333 \n",
      "Epoch 128 训练集 Loss: 0.298207 训练集 准确率: 0.914286 验证集 Loss: 0.717568 验证集 准确率: 0.810000 \n",
      "Epoch 129 训练集 Loss: 0.284181 训练集 准确率: 0.921429 验证集 Loss: 0.715401 验证集 准确率: 0.810000 \n",
      "Epoch 130 训练集 Loss: 0.322124 训练集 准确率: 0.907143 验证集 Loss: 0.713935 验证集 准确率: 0.810000 \n",
      "Epoch 131 训练集 Loss: 0.229227 训练集 准确率: 0.950000 验证集 Loss: 0.713466 验证集 准确率: 0.810000 \n",
      "Epoch 132 训练集 Loss: 0.325239 训练集 准确率: 0.928571 验证集 Loss: 0.713019 验证集 准确率: 0.813333 \n",
      "Epoch 133 训练集 Loss: 0.267472 训练集 准确率: 0.942857 验证集 Loss: 0.712621 验证集 准确率: 0.816667 \n",
      "Epoch 134 训练集 Loss: 0.265932 训练集 准确率: 0.935714 验证集 Loss: 0.712140 验证集 准确率: 0.820000 \n",
      "Epoch 135 训练集 Loss: 0.279559 训练集 准确率: 0.928571 验证集 Loss: 0.711753 验证集 准确率: 0.820000 \n",
      "Epoch 136 训练集 Loss: 0.265831 训练集 准确率: 0.942857 验证集 Loss: 0.711771 验证集 准确率: 0.820000 \n",
      "Epoch 137 训练集 Loss: 0.237823 训练集 准确率: 0.950000 验证集 Loss: 0.711317 验证集 准确率: 0.820000 \n",
      "Epoch 138 训练集 Loss: 0.275196 训练集 准确率: 0.942857 验证集 Loss: 0.714006 验证集 准确率: 0.820000 \n",
      "Epoch 139 训练集 Loss: 0.260555 训练集 准确率: 0.921429 验证集 Loss: 0.716287 验证集 准确率: 0.813333 \n",
      "Epoch 140 训练集 Loss: 0.279098 训练集 准确率: 0.928571 验证集 Loss: 0.718338 验证集 准确率: 0.816667 \n",
      "Epoch 141 训练集 Loss: 0.316581 训练集 准确率: 0.914286 验证集 Loss: 0.719225 验证集 准确率: 0.816667 \n",
      "Epoch 142 训练集 Loss: 0.270009 训练集 准确率: 0.928571 验证集 Loss: 0.719406 验证集 准确率: 0.813333 \n",
      "Epoch 143 训练集 Loss: 0.224365 训练集 准确率: 0.957143 验证集 Loss: 0.719295 验证集 准确率: 0.813333 \n",
      "Epoch 144 训练集 Loss: 0.290650 训练集 准确率: 0.928571 验证集 Loss: 0.719273 验证集 准确率: 0.810000 \n",
      "Epoch 145 训练集 Loss: 0.235465 训练集 准确率: 0.950000 验证集 Loss: 0.718970 验证集 准确率: 0.806667 \n",
      "Epoch 146 训练集 Loss: 0.279550 训练集 准确率: 0.928571 验证集 Loss: 0.717692 验证集 准确率: 0.806667 \n",
      "Epoch 147 训练集 Loss: 0.315205 训练集 准确率: 0.914286 验证集 Loss: 0.716358 验证集 准确率: 0.806667 \n",
      "Epoch 148 训练集 Loss: 0.228987 训练集 准确率: 0.957143 验证集 Loss: 0.715233 验证集 准确率: 0.806667 \n",
      "Epoch 149 训练集 Loss: 0.325821 训练集 准确率: 0.921429 验证集 Loss: 0.714662 验证集 准确率: 0.806667 \n",
      "Epoch 150 训练集 Loss: 0.230201 训练集 准确率: 0.950000 验证集 Loss: 0.714402 验证集 准确率: 0.810000 \n",
      "Epoch 151 训练集 Loss: 0.380781 训练集 准确率: 0.914286 验证集 Loss: 0.715659 验证集 准确率: 0.816667 \n",
      "Epoch 152 训练集 Loss: 0.291656 训练集 准确率: 0.921429 验证集 Loss: 0.716605 验证集 准确率: 0.813333 \n",
      "Epoch 153 训练集 Loss: 0.291627 训练集 准确率: 0.928571 验证集 Loss: 0.716950 验证集 准确率: 0.813333 \n",
      "Epoch 154 训练集 Loss: 0.283269 训练集 准确率: 0.921429 验证集 Loss: 0.717164 验证集 准确率: 0.816667 \n",
      "Epoch 155 训练集 Loss: 0.267320 训练集 准确率: 0.942857 验证集 Loss: 0.717250 验证集 准确率: 0.816667 \n",
      "Epoch 156 训练集 Loss: 0.279501 训练集 准确率: 0.928571 验证集 Loss: 0.717689 验证集 准确率: 0.816667 \n",
      "Epoch 157 训练集 Loss: 0.288207 训练集 准确率: 0.921429 验证集 Loss: 0.716945 验证集 准确率: 0.820000 \n",
      "Epoch 158 训练集 Loss: 0.221226 训练集 准确率: 0.971429 验证集 Loss: 0.714670 验证集 准确率: 0.820000 \n",
      "Epoch 159 训练集 Loss: 0.269941 训练集 准确率: 0.921429 验证集 Loss: 0.712416 验证集 准确率: 0.820000 \n",
      "Epoch 160 训练集 Loss: 0.215211 训练集 准确率: 0.957143 验证集 Loss: 0.710103 验证集 准确率: 0.816667 \n",
      "Epoch 161 训练集 Loss: 0.275437 训练集 准确率: 0.935714 验证集 Loss: 0.708431 验证集 准确率: 0.813333 \n",
      "Epoch 162 训练集 Loss: 0.291022 训练集 准确率: 0.921429 验证集 Loss: 0.706905 验证集 准确率: 0.813333 \n",
      "Epoch 163 训练集 Loss: 0.204899 训练集 准确率: 0.957143 验证集 Loss: 0.705998 验证集 准确率: 0.810000 \n",
      "Epoch 164 训练集 Loss: 0.280492 训练集 准确率: 0.935714 验证集 Loss: 0.705175 验证集 准确率: 0.810000 \n",
      "Epoch 165 训练集 Loss: 0.255320 训练集 准确率: 0.928571 验证集 Loss: 0.705388 验证集 准确率: 0.813333 \n",
      "Epoch 166 训练集 Loss: 0.280228 训练集 准确率: 0.921429 验证集 Loss: 0.705402 验证集 准确率: 0.813333 \n",
      "Epoch 167 训练集 Loss: 0.285010 训练集 准确率: 0.892857 验证集 Loss: 0.705106 验证集 准确率: 0.813333 \n",
      "Epoch 168 训练集 Loss: 0.282670 训练集 准确率: 0.914286 验证集 Loss: 0.704936 验证集 准确率: 0.813333 \n",
      "Epoch 169 训练集 Loss: 0.276739 训练集 准确率: 0.928571 验证集 Loss: 0.704822 验证集 准确率: 0.810000 \n",
      "Epoch 170 训练集 Loss: 0.252109 训练集 准确率: 0.957143 验证集 Loss: 0.704562 验证集 准确率: 0.806667 \n",
      "Epoch 171 训练集 Loss: 0.243959 训练集 准确率: 0.921429 验证集 Loss: 0.704464 验证集 准确率: 0.810000 \n",
      "Epoch 172 训练集 Loss: 0.216106 训练集 准确率: 0.957143 验证集 Loss: 0.704761 验证集 准确率: 0.810000 \n",
      "Epoch 173 训练集 Loss: 0.249296 训练集 准确率: 0.935714 验证集 Loss: 0.705326 验证集 准确率: 0.810000 \n",
      "Epoch 174 训练集 Loss: 0.186037 训练集 准确率: 0.964286 验证集 Loss: 0.705834 验证集 准确率: 0.810000 \n",
      "Epoch 175 训练集 Loss: 0.288609 训练集 准确率: 0.921429 验证集 Loss: 0.706903 验证集 准确率: 0.813333 \n",
      "Epoch 176 训练集 Loss: 0.243827 训练集 准确率: 0.942857 验证集 Loss: 0.707951 验证集 准确率: 0.810000 \n",
      "Epoch 177 训练集 Loss: 0.236774 训练集 准确率: 0.950000 验证集 Loss: 0.709210 验证集 准确率: 0.810000 \n",
      "Epoch 178 训练集 Loss: 0.274182 训练集 准确率: 0.907143 验证集 Loss: 0.709726 验证集 准确率: 0.806667 \n",
      "Epoch 179 训练集 Loss: 0.215828 训练集 准确率: 0.957143 验证集 Loss: 0.710351 验证集 准确率: 0.806667 \n",
      "Epoch 180 训练集 Loss: 0.213418 训练集 准确率: 0.971429 验证集 Loss: 0.711194 验证集 准确率: 0.810000 \n",
      "Epoch 181 训练集 Loss: 0.181342 训练集 准确率: 0.964286 验证集 Loss: 0.711748 验证集 准确率: 0.810000 \n",
      "Epoch 182 训练集 Loss: 0.263651 训练集 准确率: 0.928571 验证集 Loss: 0.712182 验证集 准确率: 0.810000 \n",
      "Epoch 183 训练集 Loss: 0.303869 训练集 准确率: 0.928571 验证集 Loss: 0.711678 验证集 准确率: 0.810000 \n",
      "Epoch 184 训练集 Loss: 0.192063 训练集 准确率: 0.942857 验证集 Loss: 0.710821 验证集 准确率: 0.810000 \n",
      "Epoch 185 训练集 Loss: 0.266142 训练集 准确率: 0.942857 验证集 Loss: 0.709963 验证集 准确率: 0.810000 \n",
      "Epoch 186 训练集 Loss: 0.232294 训练集 准确率: 0.957143 验证集 Loss: 0.709684 验证集 准确率: 0.806667 \n",
      "Epoch 187 训练集 Loss: 0.255915 训练集 准确率: 0.928571 验证集 Loss: 0.708349 验证集 准确率: 0.806667 \n",
      "Epoch 188 训练集 Loss: 0.250698 训练集 准确率: 0.957143 验证集 Loss: 0.707560 验证集 准确率: 0.806667 \n",
      "Epoch 189 训练集 Loss: 0.239451 训练集 准确率: 0.914286 验证集 Loss: 0.706433 验证集 准确率: 0.810000 \n",
      "Epoch 190 训练集 Loss: 0.276107 训练集 准确率: 0.928571 验证集 Loss: 0.707050 验证集 准确率: 0.816667 \n",
      "Epoch 191 训练集 Loss: 0.232344 训练集 准确率: 0.935714 验证集 Loss: 0.707994 验证集 准确率: 0.816667 \n",
      "Epoch 192 训练集 Loss: 0.255217 训练集 准确率: 0.914286 验证集 Loss: 0.709401 验证集 准确率: 0.813333 \n",
      "Epoch 193 训练集 Loss: 0.165194 训练集 准确率: 0.957143 验证集 Loss: 0.711127 验证集 准确率: 0.813333 \n",
      "Epoch 194 训练集 Loss: 0.254483 训练集 准确率: 0.942857 验证集 Loss: 0.711748 验证集 准确率: 0.816667 \n",
      "Epoch 195 训练集 Loss: 0.262615 训练集 准确率: 0.928571 验证集 Loss: 0.712854 验证集 准确率: 0.816667 \n",
      "Epoch 196 训练集 Loss: 0.218592 训练集 准确率: 0.957143 验证集 Loss: 0.713685 验证集 准确率: 0.816667 \n",
      "Epoch 197 训练集 Loss: 0.279333 训练集 准确率: 0.914286 验证集 Loss: 0.713982 验证集 准确率: 0.813333 \n",
      "Epoch 198 训练集 Loss: 0.192131 训练集 准确率: 0.957143 验证集 Loss: 0.713444 验证集 准确率: 0.816667 \n",
      "Epoch 199 训练集 Loss: 0.222066 训练集 准确率: 0.957143 验证集 Loss: 0.710943 验证集 准确率: 0.813333 \n",
      "Cora数据集 结果\n",
      "最好验证集 第 104 Epoch 准确率 0.826667\n",
      "对应测试集合 准确率: 0.808000\n"
     ]
    }
   ],
   "source": [
    "# (CPU版)可以自己调整超参数，比如学习率，epoch数，看看结果变化如何\n",
    "!python check_on_cora.py  --epoch 200 --hidden_size 16 --learning_rate 0.01 --dropout 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## 2. GAT模型\n",
    "\n",
    "[GAT模型](https://arxiv.org/abs/1710.10903)进一步考虑了邻节点对当前节点的重要程度。建议：使用 GPU 来跑，速度比较快。\n",
    "### 完成Single-Head GAT的消息传递机制\n",
    "单头GAT的计算公式如下：\n",
    "![](https://ai-studio-static-online.cdn.bcebos.com/811b7475b827490da0ed777f9c427c5c0002f26e65044bddaea81eb3bfea77ca)\n",
    "\n",
    "下面我们要做的，就是按照公式，一步步地实现我们的单头 GAT中的 send和recv 函数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "其中：\n",
    "- 在 send 函数中完成 LeakyReLU部分的计算；\n",
    "- 在 recv 函数中，对接受到的 logits 信息进行 softmax 操作，形成归一化的分数(公式当中的 alpha)，再与结果进行加权求和。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Overwriting demo_gat.py\n"
     ]
    }
   ],
   "source": [
    "%%writefile demo_gat.py\n",
    "\n",
    "from pgl.utils import paddle_helper\n",
    "import paddle.fluid as fluid\n",
    "\n",
    "def single_head_gat(graph_wrapper, node_feature, hidden_size, name):\n",
    "    # 实现单头GAT\n",
    "\n",
    "    def send_func(src_feat, dst_feat, edge_feat):\n",
    "        ##################################\n",
    "        # 按照提示一步步理解代码吧，你只需要填###的地方\n",
    "\n",
    "        # 1. 将源节点特征与目标节点特征concat 起来，对应公式当中的 concat 符号，可能用到的 API: fluid.layers.concat\n",
    "        Wh = fluid.layers.concat([src_feat[\"Wh\"], dst_feat[\"Wh\"]], -1)\n",
    "    \n",
    "        # 2. 将上述 Wh 结果通过全连接层，也就对应公式中的a^T\n",
    "\n",
    "        alpha = fluid.layers.fc(Wh, \n",
    "                            size=1, \n",
    "                            name=name + \"_alpha\", \n",
    "                            bias_attr=False)\n",
    "\n",
    "        # 3. 将计算好的 alpha 利用 LeakyReLU 函数激活，可能用到的 API: fluid.layers.leaky_relu\n",
    "        alpha = fluid.layers.leaky_relu(alpha, 0.2)\n",
    "        \n",
    "        ##################################\n",
    "        return {\"alpha\": alpha, \"Wh\": src_feat[\"Wh\"]}\n",
    "    \n",
    "    def recv_func(msg):\n",
    "        ##################################\n",
    "        # 按照提示一步步理解代码吧，你只需要填###的地方\n",
    "\n",
    "        # 1. 对接收到的 alpha 信息进行 softmax 操作，形成归一化分数，可能用到的 API: paddle_helper.sequence_softmax\n",
    "        alpha = msg[\"alpha\"]\n",
    "        norm_alpha = paddle_helper.sequence_softmax(alpha)\n",
    "\n",
    "        # 2. 对 msg[\"Wh\"]，也就是节点特征，用上述结果进行加权\n",
    "        output = norm_alpha * msg[\"Wh\"]\n",
    "\n",
    "        # 3. 对加权后的结果进行相加的邻居聚合，可能用到的API: fluid.layers.sequence_pool\n",
    "        output = fluid.layers.sequence_pool(output, pool_type=\"sum\")\n",
    "        ##################################\n",
    "        return output\n",
    "    \n",
    "    # 这一步，其实对应了求解公式当中的Whi, Whj，相当于对node feature加了一个全连接层\n",
    "\n",
    "    Wh = fluid.layers.fc(node_feature, hidden_size, bias_attr=False, name=name + \"_hidden\")\n",
    "    # 消息传递机制执行过程\n",
    "    message = graph_wrapper.send(send_func, nfeat_list=[(\"Wh\", Wh)])\n",
    "    output = graph_wrapper.recv(message, recv_func)\n",
    "    output = fluid.layers.elu(output)\n",
    "    return output\n",
    "\n",
    "def gat(graph_wrapper, node_feature, hidden_size):\n",
    "    # 完整多头GAT\n",
    "\n",
    "    # 这里配置多个头，每个头的输出concat在一起，构成多头GAT\n",
    "    heads_output = []\n",
    "    # 可以调整头数 (8 head x 8 hidden_size)的效果较好 \n",
    "    n_heads = 8\n",
    "    for head_no in range(n_heads):\n",
    "        # 请完成单头的GAT的代码\n",
    "        single_output = single_head_gat(graph_wrapper, \n",
    "                            node_feature, \n",
    "                            hidden_size, \n",
    "                            name=\"head_%s\" % (head_no) )\n",
    "        heads_output.append(single_output)\n",
    "    \n",
    "    output = fluid.layers.concat(heads_output, -1)\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W1126 13:36:47.820262  1551 device_context.cc:252] Please NOTE: device: 0, CUDA Capability: 70, Driver API Version: 10.1, Runtime API Version: 9.0\n",
      "W1126 13:36:47.825913  1551 device_context.cc:260] device: 0, cuDNN Version: 7.6.\n",
      "开始训练 Cora数据集 220 Epoch\n",
      "Epoch 0 训练集 Loss: 1.945942 训练集 准确率: 0.185714 验证集 Loss: 1.933289 验证集 准确率: 0.443333 \n",
      "Epoch 1 训练集 Loss: 1.928850 训练集 准确率: 0.485714 验证集 Loss: 1.921229 验证集 准确率: 0.513333 \n",
      "Epoch 2 训练集 Loss: 1.912145 训练集 准确率: 0.557143 验证集 Loss: 1.908966 验证集 准确率: 0.533333 \n",
      "Epoch 3 训练集 Loss: 1.895647 训练集 准确率: 0.592857 验证集 Loss: 1.896475 验证集 准确率: 0.526667 \n",
      "Epoch 4 训练集 Loss: 1.877204 训练集 准确率: 0.628571 验证集 Loss: 1.883650 验证集 准确率: 0.536667 \n",
      "Epoch 5 训练集 Loss: 1.858485 训练集 准确率: 0.592857 验证集 Loss: 1.870457 验证集 准确率: 0.533333 \n",
      "Epoch 6 训练集 Loss: 1.839544 训练集 准确率: 0.578571 验证集 Loss: 1.856835 验证集 准确率: 0.540000 \n",
      "Epoch 7 训练集 Loss: 1.819779 训练集 准确率: 0.592857 验证集 Loss: 1.842797 验证集 准确率: 0.543333 \n",
      "Epoch 8 训练集 Loss: 1.802342 训练集 准确率: 0.621429 验证集 Loss: 1.828381 验证集 准确率: 0.546667 \n",
      "Epoch 9 训练集 Loss: 1.779627 训练集 准确率: 0.628571 验证集 Loss: 1.813569 验证集 准确率: 0.546667 \n",
      "Epoch 10 训练集 Loss: 1.763443 训练集 准确率: 0.621429 验证集 Loss: 1.798387 验证集 准确率: 0.546667 \n",
      "Epoch 11 训练集 Loss: 1.735448 训练集 准确率: 0.635714 验证集 Loss: 1.782835 验证集 准确率: 0.543333 \n",
      "Epoch 12 训练集 Loss: 1.723310 训练集 准确率: 0.614286 验证集 Loss: 1.767013 验证集 准确率: 0.543333 \n",
      "Epoch 13 训练集 Loss: 1.693091 训练集 准确率: 0.628571 验证集 Loss: 1.750880 验证集 准确率: 0.543333 \n",
      "Epoch 14 训练集 Loss: 1.678448 训练集 准确率: 0.642857 验证集 Loss: 1.734497 验证集 准确率: 0.543333 \n",
      "Epoch 15 训练集 Loss: 1.644689 训练集 准确率: 0.614286 验证集 Loss: 1.717810 验证集 准确率: 0.546667 \n",
      "Epoch 16 训练集 Loss: 1.629759 训练集 准确率: 0.642857 验证集 Loss: 1.700908 验证集 准确率: 0.546667 \n",
      "Epoch 17 训练集 Loss: 1.591849 训练集 准确率: 0.650000 验证集 Loss: 1.683702 验证集 准确率: 0.550000 \n",
      "Epoch 18 训练集 Loss: 1.571611 训练集 准确率: 0.621429 验证集 Loss: 1.666259 验证集 准确率: 0.550000 \n",
      "Epoch 19 训练集 Loss: 1.544666 训练集 准确率: 0.628571 验证集 Loss: 1.648612 验证集 准确率: 0.553333 \n",
      "Epoch 20 训练集 Loss: 1.512002 训练集 准确率: 0.664286 验证集 Loss: 1.630742 验证集 准确率: 0.553333 \n",
      "Epoch 21 训练集 Loss: 1.499991 训练集 准确率: 0.621429 验证集 Loss: 1.612798 验证集 准确率: 0.556667 \n",
      "Epoch 22 训练集 Loss: 1.486302 训练集 准确率: 0.664286 验证集 Loss: 1.594809 验证集 准确率: 0.556667 \n",
      "Epoch 23 训练集 Loss: 1.458164 训练集 准确率: 0.678571 验证集 Loss: 1.576805 验证集 准确率: 0.560000 \n",
      "Epoch 24 训练集 Loss: 1.424910 训练集 准确率: 0.707143 验证集 Loss: 1.558772 验证集 准确率: 0.560000 \n",
      "Epoch 25 训练集 Loss: 1.401973 训练集 准确率: 0.678571 验证集 Loss: 1.540774 验证集 准确率: 0.563333 \n",
      "Epoch 26 训练集 Loss: 1.370842 训练集 准确率: 0.714286 验证集 Loss: 1.522780 验证集 准确率: 0.566667 \n",
      "Epoch 27 训练集 Loss: 1.339626 训练集 准确率: 0.685714 验证集 Loss: 1.504841 验证集 准确率: 0.580000 \n",
      "Epoch 28 训练集 Loss: 1.314039 训练集 准确率: 0.728571 验证集 Loss: 1.486931 验证集 准确率: 0.580000 \n",
      "Epoch 29 训练集 Loss: 1.304322 训练集 准确率: 0.750000 验证集 Loss: 1.469096 验证集 准确率: 0.586667 \n",
      "Epoch 30 训练集 Loss: 1.261322 训练集 准确率: 0.757143 验证集 Loss: 1.451387 验证集 准确率: 0.590000 \n",
      "Epoch 31 训练集 Loss: 1.249936 训练集 准确率: 0.750000 验证集 Loss: 1.433750 验证集 准确率: 0.603333 \n",
      "Epoch 32 训练集 Loss: 1.222497 训练集 准确率: 0.778571 验证集 Loss: 1.416300 验证集 准确率: 0.603333 \n",
      "Epoch 33 训练集 Loss: 1.204233 训练集 准确率: 0.785714 验证集 Loss: 1.398979 验证集 准确率: 0.613333 \n",
      "Epoch 34 训练集 Loss: 1.173884 训练集 准确率: 0.771429 验证集 Loss: 1.381806 验证集 准确率: 0.630000 \n",
      "Epoch 35 训练集 Loss: 1.165523 训练集 准确率: 0.785714 验证集 Loss: 1.364879 验证集 准确率: 0.636667 \n",
      "Epoch 36 训练集 Loss: 1.119410 训练集 准确率: 0.800000 验证集 Loss: 1.348039 验证集 准确率: 0.646667 \n",
      "Epoch 37 训练集 Loss: 1.103830 训练集 准确率: 0.792857 验证集 Loss: 1.331362 验证集 准确率: 0.656667 \n",
      "Epoch 38 训练集 Loss: 1.086882 训练集 准确率: 0.842857 验证集 Loss: 1.314983 验证集 准确率: 0.666667 \n",
      "Epoch 39 训练集 Loss: 1.057840 训练集 准确率: 0.807143 验证集 Loss: 1.298816 验证集 准确率: 0.680000 \n",
      "Epoch 40 训练集 Loss: 1.018900 训练集 准确率: 0.821429 验证集 Loss: 1.282894 验证集 准确率: 0.690000 \n",
      "Epoch 41 训练集 Loss: 1.011738 训练集 准确率: 0.850000 验证集 Loss: 1.267238 验证集 准确率: 0.693333 \n",
      "Epoch 42 训练集 Loss: 0.987056 训练集 准确率: 0.821429 验证集 Loss: 1.251827 验证集 准确率: 0.710000 \n",
      "Epoch 43 训练集 Loss: 0.964190 训练集 准确率: 0.842857 验证集 Loss: 1.236721 验证集 准确率: 0.716667 \n",
      "Epoch 44 训练集 Loss: 0.931771 训练集 准确率: 0.857143 验证集 Loss: 1.221807 验证集 准确率: 0.726667 \n",
      "Epoch 45 训练集 Loss: 0.911214 训练集 准确率: 0.850000 验证集 Loss: 1.207188 验证集 准确率: 0.733333 \n",
      "Epoch 46 训练集 Loss: 0.896949 训练集 准确率: 0.871429 验证集 Loss: 1.192875 验证集 准确率: 0.736667 \n",
      "Epoch 47 训练集 Loss: 0.874783 训练集 准确率: 0.871429 验证集 Loss: 1.178852 验证集 准确率: 0.750000 \n",
      "Epoch 48 训练集 Loss: 0.855697 训练集 准确率: 0.871429 验证集 Loss: 1.165097 验证集 准确率: 0.750000 \n",
      "Epoch 49 训练集 Loss: 0.834272 训练集 准确率: 0.885714 验证集 Loss: 1.151674 验证集 准确率: 0.763333 \n",
      "Epoch 50 训练集 Loss: 0.817911 训练集 准确率: 0.885714 验证集 Loss: 1.138487 验证集 准确率: 0.766667 \n",
      "Epoch 51 训练集 Loss: 0.830001 训练集 准确率: 0.900000 验证集 Loss: 1.125646 验证集 准确率: 0.773333 \n",
      "Epoch 52 训练集 Loss: 0.779847 训练集 准确率: 0.907143 验证集 Loss: 1.113168 验证集 准确率: 0.773333 \n",
      "Epoch 53 训练集 Loss: 0.763357 训练集 准确率: 0.900000 验证集 Loss: 1.100937 验证集 准确率: 0.776667 \n",
      "Epoch 54 训练集 Loss: 0.783126 训练集 准确率: 0.900000 验证集 Loss: 1.089006 验证集 准确率: 0.780000 \n",
      "Epoch 55 训练集 Loss: 0.743130 训练集 准确率: 0.914286 验证集 Loss: 1.077418 验证集 准确率: 0.780000 \n",
      "Epoch 56 训练集 Loss: 0.726649 训练集 准确率: 0.928571 验证集 Loss: 1.066094 验证集 准确率: 0.783333 \n",
      "Epoch 57 训练集 Loss: 0.709195 训练集 准确率: 0.914286 验证集 Loss: 1.055053 验证集 准确率: 0.780000 \n",
      "Epoch 58 训练集 Loss: 0.702618 训练集 准确率: 0.935714 验证集 Loss: 1.044275 验证集 准确率: 0.783333 \n",
      "Epoch 59 训练集 Loss: 0.672129 训练集 准确率: 0.921429 验证集 Loss: 1.033767 验证集 准确率: 0.786667 \n",
      "Epoch 60 训练集 Loss: 0.677645 训练集 准确率: 0.921429 验证集 Loss: 1.023652 验证集 准确率: 0.786667 \n",
      "Epoch 61 训练集 Loss: 0.657684 训练集 准确率: 0.942857 验证集 Loss: 1.013818 验证集 准确率: 0.790000 \n",
      "Epoch 62 训练集 Loss: 0.618457 训练集 准确率: 0.942857 验证集 Loss: 1.004300 验证集 准确率: 0.793333 \n",
      "Epoch 63 训练集 Loss: 0.623731 训练集 准确率: 0.935714 验证集 Loss: 0.995042 验证集 准确率: 0.796667 \n",
      "Epoch 64 训练集 Loss: 0.613831 训练集 准确率: 0.942857 验证集 Loss: 0.986049 验证集 准确率: 0.800000 \n",
      "Epoch 65 训练集 Loss: 0.595436 训练集 准确率: 0.942857 验证集 Loss: 0.977256 验证集 准确率: 0.800000 \n",
      "Epoch 66 训练集 Loss: 0.577802 训练集 准确率: 0.935714 验证集 Loss: 0.968885 验证集 准确率: 0.800000 \n",
      "Epoch 67 训练集 Loss: 0.541429 训练集 准确率: 0.935714 验证集 Loss: 0.960770 验证集 准确率: 0.796667 \n",
      "Epoch 68 训练集 Loss: 0.559744 训练集 准确率: 0.942857 验证集 Loss: 0.952958 验证集 准确率: 0.790000 \n",
      "Epoch 69 训练集 Loss: 0.536748 训练集 准确率: 0.950000 验证集 Loss: 0.945564 验证集 准确率: 0.793333 \n",
      "Epoch 70 训练集 Loss: 0.541609 训练集 准确率: 0.935714 验证集 Loss: 0.938451 验证集 准确率: 0.793333 \n",
      "Epoch 71 训练集 Loss: 0.536024 训练集 准确率: 0.950000 验证集 Loss: 0.931676 验证集 准确率: 0.793333 \n",
      "Epoch 72 训练集 Loss: 0.531048 训练集 准确率: 0.950000 验证集 Loss: 0.925058 验证集 准确率: 0.793333 \n",
      "Epoch 73 训练集 Loss: 0.518442 训练集 准确率: 0.942857 验证集 Loss: 0.918705 验证集 准确率: 0.800000 \n",
      "Epoch 74 训练集 Loss: 0.505422 训练集 准确率: 0.950000 验证集 Loss: 0.912528 验证集 准确率: 0.800000 \n",
      "Epoch 75 训练集 Loss: 0.514191 训练集 准确率: 0.942857 验证集 Loss: 0.906524 验证集 准确率: 0.800000 \n",
      "Epoch 76 训练集 Loss: 0.501403 训练集 准确率: 0.950000 验证集 Loss: 0.900632 验证集 准确率: 0.796667 \n",
      "Epoch 77 训练集 Loss: 0.467160 训练集 准确率: 0.957143 验证集 Loss: 0.895014 验证集 准确率: 0.793333 \n",
      "Epoch 78 训练集 Loss: 0.474902 训练集 准确率: 0.942857 验证集 Loss: 0.889719 验证集 准确率: 0.793333 \n",
      "Epoch 79 训练集 Loss: 0.471112 训练集 准确率: 0.942857 验证集 Loss: 0.884626 验证集 准确率: 0.793333 \n",
      "Epoch 80 训练集 Loss: 0.477474 训练集 准确率: 0.950000 验证集 Loss: 0.879783 验证集 准确率: 0.793333 \n",
      "Epoch 81 训练集 Loss: 0.443167 训练集 准确率: 0.957143 验证集 Loss: 0.875077 验证集 准确率: 0.793333 \n",
      "Epoch 82 训练集 Loss: 0.449401 训练集 准确率: 0.957143 验证集 Loss: 0.870647 验证集 准确率: 0.793333 \n",
      "Epoch 83 训练集 Loss: 0.436682 训练集 准确率: 0.964286 验证集 Loss: 0.866284 验证集 准确率: 0.793333 \n",
      "Epoch 84 训练集 Loss: 0.436435 训练集 准确率: 0.957143 验证集 Loss: 0.862058 验证集 准确率: 0.793333 \n",
      "Epoch 85 训练集 Loss: 0.436092 训练集 准确率: 0.957143 验证集 Loss: 0.857932 验证集 准确率: 0.796667 \n",
      "Epoch 86 训练集 Loss: 0.405491 训练集 准确率: 0.971429 验证集 Loss: 0.854040 验证集 准确率: 0.796667 \n",
      "Epoch 87 训练集 Loss: 0.383319 训练集 准确率: 0.964286 验证集 Loss: 0.850401 验证集 准确率: 0.796667 \n",
      "Epoch 88 训练集 Loss: 0.410589 训练集 准确率: 0.971429 验证集 Loss: 0.846897 验证集 准确率: 0.803333 \n",
      "Epoch 89 训练集 Loss: 0.412139 训练集 准确率: 0.964286 验证集 Loss: 0.843550 验证集 准确率: 0.803333 \n",
      "Epoch 90 训练集 Loss: 0.400761 训练集 准确率: 0.964286 验证集 Loss: 0.840280 验证集 准确率: 0.806667 \n",
      "Epoch 91 训练集 Loss: 0.358801 训练集 准确率: 0.971429 验证集 Loss: 0.837134 验证集 准确率: 0.806667 \n",
      "Epoch 92 训练集 Loss: 0.388730 训练集 准确率: 0.978571 验证集 Loss: 0.834085 验证集 准确率: 0.810000 \n",
      "Epoch 93 训练集 Loss: 0.365682 训练集 准确率: 0.971429 验证集 Loss: 0.831185 验证集 准确率: 0.813333 \n",
      "Epoch 94 训练集 Loss: 0.383760 训练集 准确率: 0.971429 验证集 Loss: 0.828480 验证集 准确率: 0.813333 \n",
      "Epoch 95 训练集 Loss: 0.348687 训练集 准确率: 0.964286 验证集 Loss: 0.825949 验证集 准确率: 0.813333 \n",
      "Epoch 96 训练集 Loss: 0.346352 训练集 准确率: 0.992857 验证集 Loss: 0.823599 验证集 准确率: 0.813333 \n",
      "Epoch 97 训练集 Loss: 0.372948 训练集 准确率: 0.971429 验证集 Loss: 0.821361 验证集 准确率: 0.813333 \n",
      "Epoch 98 训练集 Loss: 0.349923 训练集 准确率: 0.971429 验证集 Loss: 0.819197 验证集 准确率: 0.813333 \n",
      "Epoch 99 训练集 Loss: 0.343223 训练集 准确率: 0.985714 验证集 Loss: 0.817021 验证集 准确率: 0.813333 \n",
      "Epoch 100 训练集 Loss: 0.326398 训练集 准确率: 0.985714 验证集 Loss: 0.814993 验证集 准确率: 0.813333 \n",
      "Epoch 101 训练集 Loss: 0.350558 训练集 准确率: 0.971429 验证集 Loss: 0.813015 验证集 准确率: 0.816667 \n",
      "Epoch 102 训练集 Loss: 0.344655 训练集 准确率: 0.971429 验证集 Loss: 0.811072 验证集 准确率: 0.816667 \n",
      "Epoch 103 训练集 Loss: 0.342503 训练集 准确率: 0.978571 验证集 Loss: 0.809138 验证集 准确率: 0.816667 \n",
      "Epoch 104 训练集 Loss: 0.338548 训练集 准确率: 0.978571 验证集 Loss: 0.807317 验证集 准确率: 0.820000 \n",
      "Epoch 105 训练集 Loss: 0.312021 训练集 准确率: 0.978571 验证集 Loss: 0.805671 验证集 准确率: 0.820000 \n",
      "Epoch 106 训练集 Loss: 0.327499 训练集 准确率: 0.985714 验证集 Loss: 0.804140 验证集 准确率: 0.820000 \n",
      "Epoch 107 训练集 Loss: 0.308463 训练集 准确率: 0.992857 验证集 Loss: 0.802738 验证集 准确率: 0.820000 \n",
      "Epoch 108 训练集 Loss: 0.334963 训练集 准确率: 0.985714 验证集 Loss: 0.801326 验证集 准确率: 0.820000 \n",
      "Epoch 109 训练集 Loss: 0.304802 训练集 准确率: 0.978571 验证集 Loss: 0.799961 验证集 准确率: 0.820000 \n",
      "Epoch 110 训练集 Loss: 0.304803 训练集 准确率: 0.971429 验证集 Loss: 0.798607 验证集 准确率: 0.820000 \n",
      "Epoch 111 训练集 Loss: 0.295872 训练集 准确率: 0.978571 验证集 Loss: 0.797261 验证集 准确率: 0.820000 \n",
      "Epoch 112 训练集 Loss: 0.310086 训练集 准确率: 0.985714 验证集 Loss: 0.796053 验证集 准确率: 0.820000 \n",
      "Epoch 113 训练集 Loss: 0.313991 训练集 准确率: 0.985714 验证集 Loss: 0.794772 验证集 准确率: 0.820000 \n",
      "Epoch 114 训练集 Loss: 0.292201 训练集 准确率: 0.985714 验证集 Loss: 0.793570 验证集 准确率: 0.820000 \n",
      "Epoch 115 训练集 Loss: 0.291646 训练集 准确率: 0.985714 验证集 Loss: 0.792442 验证集 准确率: 0.823333 \n",
      "Epoch 116 训练集 Loss: 0.277233 训练集 准确率: 0.985714 验证集 Loss: 0.791467 验证集 准确率: 0.820000 \n",
      "Epoch 117 训练集 Loss: 0.274445 训练集 准确率: 1.000000 验证集 Loss: 0.790512 验证集 准确率: 0.816667 \n",
      "Epoch 118 训练集 Loss: 0.283120 训练集 准确率: 0.978571 验证集 Loss: 0.789597 验证集 准确率: 0.816667 \n",
      "Epoch 119 训练集 Loss: 0.278033 训练集 准确率: 0.992857 验证集 Loss: 0.788826 验证集 准确率: 0.816667 \n",
      "Epoch 120 训练集 Loss: 0.289189 训练集 准确率: 0.992857 验证集 Loss: 0.788099 验证集 准确率: 0.816667 \n",
      "Epoch 121 训练集 Loss: 0.271022 训练集 准确率: 0.971429 验证集 Loss: 0.787475 验证集 准确率: 0.816667 \n",
      "Epoch 122 训练集 Loss: 0.268862 训练集 准确率: 0.985714 验证集 Loss: 0.786887 验证集 准确率: 0.816667 \n",
      "Epoch 123 训练集 Loss: 0.268148 训练集 准确率: 0.992857 验证集 Loss: 0.786456 验证集 准确率: 0.813333 \n",
      "Epoch 124 训练集 Loss: 0.263836 训练集 准确率: 0.992857 验证集 Loss: 0.786078 验证集 准确率: 0.813333 \n",
      "Epoch 125 训练集 Loss: 0.273063 训练集 准确率: 0.985714 验证集 Loss: 0.785731 验证集 准确率: 0.810000 \n",
      "Epoch 126 训练集 Loss: 0.274660 训练集 准确率: 0.992857 验证集 Loss: 0.785373 验证集 准确率: 0.810000 \n",
      "Epoch 127 训练集 Loss: 0.273142 训练集 准确率: 0.978571 验证集 Loss: 0.784945 验证集 准确率: 0.810000 \n",
      "Epoch 128 训练集 Loss: 0.272366 训练集 准确率: 0.978571 验证集 Loss: 0.784541 验证集 准确率: 0.810000 \n",
      "Epoch 129 训练集 Loss: 0.263958 训练集 准确率: 0.992857 验证集 Loss: 0.784001 验证集 准确率: 0.810000 \n",
      "Epoch 130 训练集 Loss: 0.265895 训练集 准确率: 0.992857 验证集 Loss: 0.783388 验证集 准确率: 0.810000 \n",
      "Epoch 131 训练集 Loss: 0.267701 训练集 准确率: 0.992857 验证集 Loss: 0.782776 验证集 准确率: 0.806667 \n",
      "Epoch 132 训练集 Loss: 0.248259 训练集 准确率: 0.992857 验证集 Loss: 0.782297 验证集 准确率: 0.803333 \n",
      "Epoch 133 训练集 Loss: 0.267643 训练集 准确率: 0.985714 验证集 Loss: 0.781891 验证集 准确率: 0.800000 \n",
      "Epoch 134 训练集 Loss: 0.259102 训练集 准确率: 0.992857 验证集 Loss: 0.781600 验证集 准确率: 0.800000 \n",
      "Epoch 135 训练集 Loss: 0.251009 训练集 准确率: 0.992857 验证集 Loss: 0.781351 验证集 准确率: 0.800000 \n",
      "Epoch 136 训练集 Loss: 0.245396 训练集 准确率: 0.992857 验证集 Loss: 0.781099 验证集 准确率: 0.800000 \n",
      "Epoch 137 训练集 Loss: 0.242988 训练集 准确率: 0.992857 验证集 Loss: 0.780812 验证集 准确率: 0.796667 \n",
      "Epoch 138 训练集 Loss: 0.251385 训练集 准确率: 1.000000 验证集 Loss: 0.780476 验证集 准确率: 0.796667 \n",
      "Epoch 139 训练集 Loss: 0.248352 训练集 准确率: 1.000000 验证集 Loss: 0.780220 验证集 准确率: 0.796667 \n",
      "Epoch 140 训练集 Loss: 0.236514 训练集 准确率: 1.000000 验证集 Loss: 0.780011 验证集 准确率: 0.796667 \n",
      "Epoch 141 训练集 Loss: 0.237928 训练集 准确率: 0.992857 验证集 Loss: 0.779984 验证集 准确率: 0.796667 \n",
      "Epoch 142 训练集 Loss: 0.219814 训练集 准确率: 1.000000 验证集 Loss: 0.780050 验证集 准确率: 0.796667 \n",
      "Epoch 143 训练集 Loss: 0.236018 训练集 准确率: 0.992857 验证集 Loss: 0.780293 验证集 准确率: 0.796667 \n",
      "Epoch 144 训练集 Loss: 0.234798 训练集 准确率: 1.000000 验证集 Loss: 0.780549 验证集 准确率: 0.796667 \n",
      "Epoch 145 训练集 Loss: 0.233341 训练集 准确率: 0.985714 验证集 Loss: 0.780884 验证集 准确率: 0.796667 \n",
      "Epoch 146 训练集 Loss: 0.225193 训练集 准确率: 1.000000 验证集 Loss: 0.781205 验证集 准确率: 0.796667 \n",
      "Epoch 147 训练集 Loss: 0.222415 训练集 准确率: 1.000000 验证集 Loss: 0.781467 验证集 准确率: 0.796667 \n",
      "Epoch 148 训练集 Loss: 0.239414 训练集 准确率: 0.992857 验证集 Loss: 0.781523 验证集 准确率: 0.796667 \n",
      "Epoch 149 训练集 Loss: 0.234689 训练集 准确率: 1.000000 验证集 Loss: 0.781587 验证集 准确率: 0.796667 \n",
      "Epoch 150 训练集 Loss: 0.230299 训练集 准确率: 0.992857 验证集 Loss: 0.781676 验证集 准确率: 0.796667 \n",
      "Epoch 151 训练集 Loss: 0.230964 训练集 准确率: 1.000000 验证集 Loss: 0.781735 验证集 准确率: 0.796667 \n",
      "Epoch 152 训练集 Loss: 0.210689 训练集 准确率: 0.992857 验证集 Loss: 0.781818 验证集 准确率: 0.796667 \n",
      "Epoch 153 训练集 Loss: 0.224304 训练集 准确率: 0.985714 验证集 Loss: 0.781760 验证集 准确率: 0.796667 \n",
      "Epoch 154 训练集 Loss: 0.233994 训练集 准确率: 0.992857 验证集 Loss: 0.781662 验证集 准确率: 0.796667 \n",
      "Epoch 155 训练集 Loss: 0.226040 训练集 准确率: 0.985714 验证集 Loss: 0.781405 验证集 准确率: 0.800000 \n",
      "Epoch 156 训练集 Loss: 0.221249 训练集 准确率: 1.000000 验证集 Loss: 0.781234 验证集 准确率: 0.800000 \n",
      "Epoch 157 训练集 Loss: 0.215361 训练集 准确率: 1.000000 验证集 Loss: 0.781067 验证集 准确率: 0.803333 \n",
      "Epoch 158 训练集 Loss: 0.221742 训练集 准确率: 0.992857 验证集 Loss: 0.780885 验证集 准确率: 0.803333 \n",
      "Epoch 159 训练集 Loss: 0.232874 训练集 准确率: 1.000000 验证集 Loss: 0.780848 验证集 准确率: 0.803333 \n",
      "Epoch 160 训练集 Loss: 0.209234 训练集 准确率: 0.992857 验证集 Loss: 0.780907 验证集 准确率: 0.803333 \n",
      "Epoch 161 训练集 Loss: 0.203765 训练集 准确率: 1.000000 验证集 Loss: 0.780901 验证集 准确率: 0.803333 \n",
      "Epoch 162 训练集 Loss: 0.210642 训练集 准确率: 0.992857 验证集 Loss: 0.781006 验证集 准确率: 0.806667 \n",
      "Epoch 163 训练集 Loss: 0.201378 训练集 准确率: 1.000000 验证集 Loss: 0.781104 验证集 准确率: 0.806667 \n",
      "Epoch 164 训练集 Loss: 0.205853 训练集 准确率: 0.992857 验证集 Loss: 0.781171 验证集 准确率: 0.806667 \n",
      "Epoch 165 训练集 Loss: 0.215894 训练集 准确率: 0.992857 验证集 Loss: 0.781399 验证集 准确率: 0.806667 \n",
      "Epoch 166 训练集 Loss: 0.227445 训练集 准确率: 1.000000 验证集 Loss: 0.781465 验证集 准确率: 0.806667 \n",
      "Epoch 167 训练集 Loss: 0.203606 训练集 准确率: 0.992857 验证集 Loss: 0.781429 验证集 准确率: 0.800000 \n",
      "Epoch 168 训练集 Loss: 0.198542 训练集 准确率: 1.000000 验证集 Loss: 0.781278 验证集 准确率: 0.796667 \n",
      "Epoch 169 训练集 Loss: 0.209174 训练集 准确率: 1.000000 验证集 Loss: 0.781277 验证集 准确率: 0.793333 \n",
      "Epoch 170 训练集 Loss: 0.197971 训练集 准确率: 1.000000 验证集 Loss: 0.781377 验证集 准确率: 0.793333 \n",
      "Epoch 171 训练集 Loss: 0.222953 训练集 准确率: 1.000000 验证集 Loss: 0.781416 验证集 准确率: 0.800000 \n",
      "Epoch 172 训练集 Loss: 0.202238 训练集 准确率: 0.992857 验证集 Loss: 0.781545 验证集 准确率: 0.800000 \n",
      "Epoch 173 训练集 Loss: 0.215927 训练集 准确率: 0.992857 验证集 Loss: 0.781824 验证集 准确率: 0.800000 \n",
      "Epoch 174 训练集 Loss: 0.201920 训练集 准确率: 1.000000 验证集 Loss: 0.782241 验证集 准确率: 0.800000 \n",
      "Epoch 175 训练集 Loss: 0.196684 训练集 准确率: 1.000000 验证集 Loss: 0.782753 验证集 准确率: 0.796667 \n",
      "Epoch 176 训练集 Loss: 0.208376 训练集 准确率: 0.992857 验证集 Loss: 0.783217 验证集 准确率: 0.796667 \n",
      "Epoch 177 训练集 Loss: 0.192438 训练集 准确率: 1.000000 验证集 Loss: 0.783760 验证集 准确率: 0.796667 \n",
      "Epoch 178 训练集 Loss: 0.200638 训练集 准确率: 1.000000 验证集 Loss: 0.784404 验证集 准确率: 0.796667 \n",
      "Epoch 179 训练集 Loss: 0.191791 训练集 准确率: 0.992857 验证集 Loss: 0.785034 验证集 准确率: 0.793333 \n",
      "Epoch 180 训练集 Loss: 0.201849 训练集 准确率: 1.000000 验证集 Loss: 0.785671 验证集 准确率: 0.793333 \n",
      "Epoch 181 训练集 Loss: 0.186931 训练集 准确率: 1.000000 验证集 Loss: 0.785977 验证集 准确率: 0.790000 \n",
      "Epoch 182 训练集 Loss: 0.188094 训练集 准确率: 1.000000 验证集 Loss: 0.786331 验证集 准确率: 0.790000 \n",
      "Epoch 183 训练集 Loss: 0.182332 训练集 准确率: 1.000000 验证集 Loss: 0.786557 验证集 准确率: 0.790000 \n",
      "Epoch 184 训练集 Loss: 0.182817 训练集 准确率: 1.000000 验证集 Loss: 0.786929 验证集 准确率: 0.790000 \n",
      "Epoch 185 训练集 Loss: 0.183687 训练集 准确率: 0.992857 验证集 Loss: 0.787161 验证集 准确率: 0.790000 \n",
      "Epoch 186 训练集 Loss: 0.194867 训练集 准确率: 1.000000 验证集 Loss: 0.787498 验证集 准确率: 0.790000 \n",
      "Epoch 187 训练集 Loss: 0.195751 训练集 准确率: 1.000000 验证集 Loss: 0.787711 验证集 准确率: 0.786667 \n",
      "Epoch 188 训练集 Loss: 0.178555 训练集 准确率: 1.000000 验证集 Loss: 0.788023 验证集 准确率: 0.786667 \n",
      "Epoch 189 训练集 Loss: 0.181899 训练集 准确率: 1.000000 验证集 Loss: 0.788236 验证集 准确率: 0.786667 \n",
      "Epoch 190 训练集 Loss: 0.200539 训练集 准确率: 1.000000 验证集 Loss: 0.788552 验证集 准确率: 0.786667 \n",
      "Epoch 191 训练集 Loss: 0.194813 训练集 准确率: 1.000000 验证集 Loss: 0.788848 验证集 准确率: 0.786667 \n",
      "Epoch 192 训练集 Loss: 0.188184 训练集 准确率: 1.000000 验证集 Loss: 0.789149 验证集 准确率: 0.783333 \n",
      "Epoch 193 训练集 Loss: 0.191324 训练集 准确率: 1.000000 验证集 Loss: 0.789446 验证集 准确率: 0.783333 \n",
      "Epoch 194 训练集 Loss: 0.166003 训练集 准确率: 1.000000 验证集 Loss: 0.789901 验证集 准确率: 0.783333 \n",
      "Epoch 195 训练集 Loss: 0.192144 训练集 准确率: 0.992857 验证集 Loss: 0.790360 验证集 准确率: 0.783333 \n",
      "Epoch 196 训练集 Loss: 0.175042 训练集 准确率: 1.000000 验证集 Loss: 0.790789 验证集 准确率: 0.783333 \n",
      "Epoch 197 训练集 Loss: 0.187075 训练集 准确率: 1.000000 验证集 Loss: 0.791213 验证集 准确率: 0.783333 \n",
      "Epoch 198 训练集 Loss: 0.165051 训练集 准确率: 1.000000 验证集 Loss: 0.791700 验证集 准确率: 0.783333 \n",
      "Epoch 199 训练集 Loss: 0.172664 训练集 准确率: 1.000000 验证集 Loss: 0.792156 验证集 准确率: 0.783333 \n",
      "Epoch 200 训练集 Loss: 0.176003 训练集 准确率: 1.000000 验证集 Loss: 0.792531 验证集 准确率: 0.783333 \n",
      "Epoch 201 训练集 Loss: 0.184333 训练集 准确率: 1.000000 验证集 Loss: 0.792843 验证集 准确率: 0.783333 \n",
      "Epoch 202 训练集 Loss: 0.195680 训练集 准确率: 1.000000 验证集 Loss: 0.793064 验证集 准确率: 0.783333 \n",
      "Epoch 203 训练集 Loss: 0.182837 训练集 准确率: 1.000000 验证集 Loss: 0.793233 验证集 准确率: 0.783333 \n",
      "Epoch 204 训练集 Loss: 0.182314 训练集 准确率: 1.000000 验证集 Loss: 0.793398 验证集 准确率: 0.783333 \n",
      "Epoch 205 训练集 Loss: 0.196125 训练集 准确率: 1.000000 验证集 Loss: 0.793545 验证集 准确率: 0.783333 \n",
      "Epoch 206 训练集 Loss: 0.175287 训练集 准确率: 1.000000 验证集 Loss: 0.793826 验证集 准确率: 0.783333 \n",
      "Epoch 207 训练集 Loss: 0.190636 训练集 准确率: 1.000000 验证集 Loss: 0.794015 验证集 准确率: 0.783333 \n",
      "Epoch 208 训练集 Loss: 0.175093 训练集 准确率: 0.992857 验证集 Loss: 0.794139 验证集 准确率: 0.783333 \n",
      "Epoch 209 训练集 Loss: 0.173985 训练集 准确率: 1.000000 验证集 Loss: 0.794369 验证集 准确率: 0.783333 \n",
      "Epoch 210 训练集 Loss: 0.171910 训练集 准确率: 1.000000 验证集 Loss: 0.794542 验证集 准确率: 0.783333 \n",
      "Epoch 211 训练集 Loss: 0.164420 训练集 准确率: 1.000000 验证集 Loss: 0.794738 验证集 准确率: 0.786667 \n",
      "Epoch 212 训练集 Loss: 0.183274 训练集 准确率: 1.000000 验证集 Loss: 0.795097 验证集 准确率: 0.786667 \n",
      "Epoch 213 训练集 Loss: 0.175739 训练集 准确率: 1.000000 验证集 Loss: 0.795564 验证集 准确率: 0.786667 \n",
      "Epoch 214 训练集 Loss: 0.170619 训练集 准确率: 1.000000 验证集 Loss: 0.796190 验证集 准确率: 0.786667 \n",
      "Epoch 215 训练集 Loss: 0.176883 训练集 准确率: 1.000000 验证集 Loss: 0.796836 验证集 准确率: 0.783333 \n",
      "Epoch 216 训练集 Loss: 0.158883 训练集 准确率: 1.000000 验证集 Loss: 0.797536 验证集 准确率: 0.783333 \n",
      "Epoch 217 训练集 Loss: 0.160776 训练集 准确率: 1.000000 验证集 Loss: 0.798153 验证集 准确率: 0.780000 \n",
      "Epoch 218 训练集 Loss: 0.170726 训练集 准确率: 1.000000 验证集 Loss: 0.798706 验证集 准确率: 0.780000 \n",
      "Epoch 219 训练集 Loss: 0.177152 训练集 准确率: 1.000000 验证集 Loss: 0.798978 验证集 准确率: 0.780000 \n",
      "Cora数据集 结果\n",
      "最好验证集 第 115 Epoch 准确率 0.823333\n",
      "对应测试集合 准确率: 0.802000\n"
     ]
    }
   ],
   "source": [
    "# (GPU版) 可以自己调整超参数，比如学习率，epoch数，看看结果变化如何\n",
    "!python check_on_cora.py --use_demo_gat --epoch 220 --hidden_size 8 --learning_rate 0.005 --dropout 0.6 --use_cuda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始训练 Cora数据集 200 Epoch\n",
      "Epoch 0 训练集 Loss: 1.947302 训练集 准确率: 0.121429 验证集 Loss: 1.917745 验证集 准确率: 0.470000 \n",
      "Epoch 1 训练集 Loss: 1.909758 训练集 准确率: 0.578571 验证集 Loss: 1.890224 验证集 准确率: 0.490000 \n",
      "Epoch 2 训练集 Loss: 1.870510 训练集 准确率: 0.585714 验证集 Loss: 1.861430 验证集 准确率: 0.503333 \n",
      "Epoch 3 训练集 Loss: 1.832636 训练集 准确率: 0.585714 验证集 Loss: 1.831290 验证集 准确率: 0.503333 \n",
      "Epoch 4 训练集 Loss: 1.789006 训练集 准确率: 0.628571 验证集 Loss: 1.799869 验证集 准确率: 0.506667 \n",
      "Epoch 5 训练集 Loss: 1.746908 训练集 准确率: 0.635714 验证集 Loss: 1.767426 验证集 准确率: 0.513333 \n",
      "Epoch 6 训练集 Loss: 1.696405 训练集 准确率: 0.642857 验证集 Loss: 1.733908 验证集 准确率: 0.516667 \n",
      "Epoch 7 训练集 Loss: 1.649045 训练集 准确率: 0.657143 验证集 Loss: 1.699559 验证集 准确率: 0.516667 \n",
      "Epoch 8 训练集 Loss: 1.602027 训练集 准确率: 0.635714 验证集 Loss: 1.664580 验证集 准确率: 0.520000 \n",
      "Epoch 9 训练集 Loss: 1.551148 训练集 准确率: 0.657143 验证集 Loss: 1.629136 验证集 准确率: 0.523333 \n",
      "Epoch 10 训练集 Loss: 1.499358 训练集 准确率: 0.671429 验证集 Loss: 1.593458 验证集 准确率: 0.526667 \n",
      "Epoch 11 训练集 Loss: 1.447127 训练集 准确率: 0.664286 验证集 Loss: 1.557769 验证集 准确率: 0.540000 \n",
      "Epoch 12 训练集 Loss: 1.401081 训练集 准确率: 0.664286 验证集 Loss: 1.522394 验证集 准确率: 0.543333 \n",
      "Epoch 13 训练集 Loss: 1.347929 训练集 准确率: 0.692857 验证集 Loss: 1.487361 验证集 准确率: 0.556667 \n",
      "Epoch 14 训练集 Loss: 1.293980 训练集 准确率: 0.671429 验证集 Loss: 1.452856 验证集 准确率: 0.563333 \n",
      "Epoch 15 训练集 Loss: 1.260859 训练集 准确率: 0.735714 验证集 Loss: 1.418821 验证集 准确率: 0.583333 \n",
      "Epoch 16 训练集 Loss: 1.194623 训练集 准确率: 0.728571 验证集 Loss: 1.385317 验证集 准确率: 0.606667 \n",
      "Epoch 17 训练集 Loss: 1.152116 训练集 准确率: 0.764286 验证集 Loss: 1.352369 验证集 准确率: 0.626667 \n",
      "Epoch 18 训练集 Loss: 1.091375 训练集 准确率: 0.757143 验证集 Loss: 1.320164 验证集 准确率: 0.643333 \n",
      "Epoch 19 训练集 Loss: 1.059029 训练集 准确率: 0.778571 验证集 Loss: 1.288621 验证集 准确率: 0.650000 \n",
      "Epoch 20 训练集 Loss: 1.012678 训练集 准确率: 0.828571 验证集 Loss: 1.257732 验证集 准确率: 0.666667 \n",
      "Epoch 21 训练集 Loss: 0.972426 训练集 准确率: 0.857143 验证集 Loss: 1.227756 验证集 准确率: 0.686667 \n",
      "Epoch 22 训练集 Loss: 0.922920 训练集 准确率: 0.871429 验证集 Loss: 1.198900 验证集 准确率: 0.703333 \n",
      "Epoch 23 训练集 Loss: 0.894641 训练集 准确率: 0.871429 验证集 Loss: 1.171050 验证集 准确率: 0.730000 \n",
      "Epoch 24 训练集 Loss: 0.817288 训练集 准确率: 0.900000 验证集 Loss: 1.144225 验证集 准确率: 0.740000 \n",
      "Epoch 25 训练集 Loss: 0.815300 训练集 准确率: 0.907143 验证集 Loss: 1.118567 验证集 准确率: 0.760000 \n",
      "Epoch 26 训练集 Loss: 0.768015 训练集 准确率: 0.921429 验证集 Loss: 1.093992 验证集 准确率: 0.753333 \n",
      "Epoch 27 训练集 Loss: 0.724898 训练集 准确率: 0.900000 验证集 Loss: 1.070576 验证集 准确率: 0.763333 \n",
      "Epoch 28 训练集 Loss: 0.716889 训练集 准确率: 0.907143 验证集 Loss: 1.048244 验证集 准确率: 0.776667 \n",
      "Epoch 29 训练集 Loss: 0.667624 训练集 准确率: 0.935714 验证集 Loss: 1.027148 验证集 准确率: 0.780000 \n",
      "Epoch 30 训练集 Loss: 0.636394 训练集 准确率: 0.921429 验证集 Loss: 1.007273 验证集 准确率: 0.786667 \n",
      "Epoch 31 训练集 Loss: 0.600643 训练集 准确率: 0.928571 验证集 Loss: 0.988574 验证集 准确率: 0.783333 \n",
      "Epoch 32 训练集 Loss: 0.583863 训练集 准确率: 0.942857 验证集 Loss: 0.970979 验证集 准确率: 0.796667 \n",
      "Epoch 33 训练集 Loss: 0.559716 训练集 准确率: 0.942857 验证集 Loss: 0.954202 验证集 准确率: 0.803333 \n",
      "Epoch 34 训练集 Loss: 0.538728 训练集 准确率: 0.942857 验证集 Loss: 0.938387 验证集 准确率: 0.800000 \n",
      "Epoch 35 训练集 Loss: 0.517080 训练集 准确率: 0.950000 验证集 Loss: 0.923436 验证集 准确率: 0.803333 \n",
      "Epoch 36 训练集 Loss: 0.496013 训练集 准确率: 0.928571 验证集 Loss: 0.909352 验证集 准确率: 0.803333 \n",
      "Epoch 37 训练集 Loss: 0.467580 训练集 准确率: 0.950000 验证集 Loss: 0.896086 验证集 准确率: 0.806667 \n",
      "Epoch 38 训练集 Loss: 0.460719 训练集 准确率: 0.950000 验证集 Loss: 0.883637 验证集 准确率: 0.813333 \n",
      "Epoch 39 训练集 Loss: 0.435683 训练集 准确率: 0.957143 验证集 Loss: 0.871937 验证集 准确率: 0.810000 \n",
      "Epoch 40 训练集 Loss: 0.414581 训练集 准确率: 0.964286 验证集 Loss: 0.860989 验证集 准确率: 0.806667 \n",
      "Epoch 41 训练集 Loss: 0.419818 训练集 准确率: 0.964286 验证集 Loss: 0.850785 验证集 准确率: 0.820000 \n",
      "Epoch 42 训练集 Loss: 0.399985 训练集 准确率: 0.957143 验证集 Loss: 0.841505 验证集 准确率: 0.820000 \n",
      "Epoch 43 训练集 Loss: 0.377834 训练集 准确率: 0.957143 验证集 Loss: 0.832950 验证集 准确率: 0.816667 \n",
      "Epoch 44 训练集 Loss: 0.362233 训练集 准确率: 0.964286 验证集 Loss: 0.825245 验证集 准确率: 0.820000 \n",
      "Epoch 45 训练集 Loss: 0.360763 训练集 准确率: 0.978571 验证集 Loss: 0.818428 验证集 准确率: 0.826667 \n",
      "Epoch 46 训练集 Loss: 0.337583 训练集 准确率: 0.964286 验证集 Loss: 0.812378 验证集 准确率: 0.826667 \n",
      "Epoch 47 训练集 Loss: 0.357023 训练集 准确率: 0.964286 验证集 Loss: 0.807200 验证集 准确率: 0.823333 \n",
      "Epoch 48 训练集 Loss: 0.334560 训练集 准确率: 0.978571 验证集 Loss: 0.802768 验证集 准确率: 0.823333 \n",
      "Epoch 49 训练集 Loss: 0.311716 训练集 准确率: 0.971429 验证集 Loss: 0.798859 验证集 准确率: 0.820000 \n",
      "Epoch 50 训练集 Loss: 0.307504 训练集 准确率: 0.978571 验证集 Loss: 0.795389 验证集 准确率: 0.820000 \n",
      "Epoch 51 训练集 Loss: 0.300261 训练集 准确率: 0.971429 验证集 Loss: 0.792470 验证集 准确率: 0.820000 \n",
      "Epoch 52 训练集 Loss: 0.310401 训练集 准确率: 0.978571 验证集 Loss: 0.789933 验证集 准确率: 0.823333 \n",
      "Epoch 53 训练集 Loss: 0.299399 训练集 准确率: 0.978571 验证集 Loss: 0.787741 验证集 准确率: 0.826667 \n",
      "Epoch 54 训练集 Loss: 0.299662 训练集 准确率: 0.985714 验证集 Loss: 0.785789 验证集 准确率: 0.826667 \n",
      "Epoch 55 训练集 Loss: 0.288591 训练集 准确率: 0.985714 验证集 Loss: 0.784044 验证集 准确率: 0.826667 \n",
      "Epoch 56 训练集 Loss: 0.282720 训练集 准确率: 1.000000 验证集 Loss: 0.782333 验证集 准确率: 0.823333 \n",
      "Epoch 57 训练集 Loss: 0.273003 训练集 准确率: 0.985714 验证集 Loss: 0.780867 验证集 准确率: 0.823333 \n",
      "Epoch 58 训练集 Loss: 0.267632 训练集 准确率: 0.992857 验证集 Loss: 0.779590 验证集 准确率: 0.823333 \n",
      "Epoch 59 训练集 Loss: 0.274604 训练集 准确率: 0.992857 验证集 Loss: 0.778513 验证集 准确率: 0.820000 \n",
      "Epoch 60 训练集 Loss: 0.262959 训练集 准确率: 0.992857 验证集 Loss: 0.777237 验证集 准确率: 0.813333 \n",
      "Epoch 61 训练集 Loss: 0.250812 训练集 准确率: 1.000000 验证集 Loss: 0.775869 验证集 准确率: 0.813333 \n",
      "Epoch 62 训练集 Loss: 0.248555 训练集 准确率: 1.000000 验证集 Loss: 0.774589 验证集 准确率: 0.813333 \n",
      "Epoch 63 训练集 Loss: 0.248744 训练集 准确率: 0.992857 验证集 Loss: 0.773188 验证集 准确率: 0.813333 \n",
      "Epoch 64 训练集 Loss: 0.240683 训练集 准确率: 0.992857 验证集 Loss: 0.772003 验证集 准确率: 0.813333 \n",
      "Epoch 65 训练集 Loss: 0.249777 训练集 准确率: 0.992857 验证集 Loss: 0.770884 验证集 准确率: 0.816667 \n",
      "Epoch 66 训练集 Loss: 0.229775 训练集 准确率: 0.985714 验证集 Loss: 0.769873 验证集 准确率: 0.816667 \n",
      "Epoch 67 训练集 Loss: 0.248645 训练集 准确率: 0.992857 验证集 Loss: 0.768970 验证集 准确率: 0.816667 \n",
      "Epoch 68 训练集 Loss: 0.235558 训练集 准确率: 0.992857 验证集 Loss: 0.768306 验证集 准确率: 0.816667 \n",
      "Epoch 69 训练集 Loss: 0.216403 训练集 准确率: 0.992857 验证集 Loss: 0.767872 验证集 准确率: 0.816667 \n",
      "Epoch 70 训练集 Loss: 0.242548 训练集 准确率: 1.000000 验证集 Loss: 0.767447 验证集 准确率: 0.816667 \n",
      "Epoch 71 训练集 Loss: 0.232166 训练集 准确率: 0.992857 验证集 Loss: 0.767143 验证集 准确率: 0.813333 \n",
      "Epoch 72 训练集 Loss: 0.224323 训练集 准确率: 1.000000 验证集 Loss: 0.766896 验证集 准确率: 0.813333 \n",
      "Epoch 73 训练集 Loss: 0.220726 训练集 准确率: 1.000000 验证集 Loss: 0.766833 验证集 准确率: 0.813333 \n",
      "Epoch 74 训练集 Loss: 0.229607 训练集 准确率: 0.992857 验证集 Loss: 0.766887 验证集 准确率: 0.813333 \n",
      "Epoch 75 训练集 Loss: 0.224047 训练集 准确率: 1.000000 验证集 Loss: 0.766876 验证集 准确率: 0.810000 \n",
      "Epoch 76 训练集 Loss: 0.205240 训练集 准确率: 0.992857 验证集 Loss: 0.766785 验证集 准确率: 0.810000 \n",
      "Epoch 77 训练集 Loss: 0.221699 训练集 准确率: 0.992857 验证集 Loss: 0.766493 验证集 准确率: 0.810000 \n",
      "Epoch 78 训练集 Loss: 0.208709 训练集 准确率: 0.985714 验证集 Loss: 0.766179 验证集 准确率: 0.810000 \n",
      "Epoch 79 训练集 Loss: 0.210671 训练集 准确率: 1.000000 验证集 Loss: 0.765936 验证集 准确率: 0.806667 \n",
      "Epoch 80 训练集 Loss: 0.187609 训练集 准确率: 1.000000 验证集 Loss: 0.765583 验证集 准确率: 0.806667 \n",
      "Epoch 81 训练集 Loss: 0.213833 训练集 准确率: 1.000000 验证集 Loss: 0.765093 验证集 准确率: 0.806667 \n",
      "Epoch 82 训练集 Loss: 0.202246 训练集 准确率: 0.992857 验证集 Loss: 0.764362 验证集 准确率: 0.806667 \n",
      "Epoch 83 训练集 Loss: 0.196822 训练集 准确率: 1.000000 验证集 Loss: 0.763799 验证集 准确率: 0.806667 \n",
      "Epoch 84 训练集 Loss: 0.191109 训练集 准确率: 1.000000 验证集 Loss: 0.763267 验证集 准确率: 0.806667 \n",
      "Epoch 85 训练集 Loss: 0.198812 训练集 准确率: 1.000000 验证集 Loss: 0.762770 验证集 准确率: 0.806667 \n",
      "Epoch 86 训练集 Loss: 0.180290 训练集 准确率: 1.000000 验证集 Loss: 0.762196 验证集 准确率: 0.806667 \n",
      "Epoch 87 训练集 Loss: 0.197758 训练集 准确率: 1.000000 验证集 Loss: 0.761755 验证集 准确率: 0.803333 \n",
      "Epoch 88 训练集 Loss: 0.180718 训练集 准确率: 1.000000 验证集 Loss: 0.761626 验证集 准确率: 0.803333 \n",
      "Epoch 89 训练集 Loss: 0.192018 训练集 准确率: 1.000000 验证集 Loss: 0.761257 验证集 准确率: 0.803333 \n",
      "Epoch 90 训练集 Loss: 0.160758 训练集 准确率: 1.000000 验证集 Loss: 0.761331 验证集 准确率: 0.800000 \n",
      "Epoch 91 训练集 Loss: 0.193190 训练集 准确率: 1.000000 验证集 Loss: 0.761828 验证集 准确率: 0.800000 \n",
      "Epoch 92 训练集 Loss: 0.180948 训练集 准确率: 1.000000 验证集 Loss: 0.762469 验证集 准确率: 0.800000 \n",
      "Epoch 93 训练集 Loss: 0.190757 训练集 准确率: 1.000000 验证集 Loss: 0.763430 验证集 准确率: 0.796667 \n",
      "Epoch 94 训练集 Loss: 0.192456 训练集 准确率: 1.000000 验证集 Loss: 0.764240 验证集 准确率: 0.796667 \n",
      "Epoch 95 训练集 Loss: 0.187367 训练集 准确率: 0.992857 验证集 Loss: 0.764904 验证集 准确率: 0.796667 \n",
      "Epoch 96 训练集 Loss: 0.161684 训练集 准确率: 1.000000 验证集 Loss: 0.765807 验证集 准确率: 0.796667 \n",
      "Epoch 97 训练集 Loss: 0.173450 训练集 准确率: 1.000000 验证集 Loss: 0.766547 验证集 准确率: 0.796667 \n",
      "Epoch 98 训练集 Loss: 0.176275 训练集 准确率: 1.000000 验证集 Loss: 0.767316 验证集 准确率: 0.796667 \n",
      "Epoch 99 训练集 Loss: 0.182120 训练集 准确率: 1.000000 验证集 Loss: 0.767966 验证集 准确率: 0.796667 \n",
      "Epoch 100 训练集 Loss: 0.165299 训练集 准确率: 1.000000 验证集 Loss: 0.768688 验证集 准确率: 0.796667 \n",
      "Epoch 101 训练集 Loss: 0.169136 训练集 准确率: 1.000000 验证集 Loss: 0.769444 验证集 准确率: 0.796667 \n",
      "Epoch 102 训练集 Loss: 0.158851 训练集 准确率: 1.000000 验证集 Loss: 0.770153 验证集 准确率: 0.796667 \n",
      "Epoch 103 训练集 Loss: 0.165251 训练集 准确率: 1.000000 验证集 Loss: 0.770831 验证集 准确率: 0.796667 \n",
      "Epoch 104 训练集 Loss: 0.173769 训练集 准确率: 1.000000 验证集 Loss: 0.771388 验证集 准确率: 0.796667 \n",
      "Epoch 105 训练集 Loss: 0.161849 训练集 准确率: 1.000000 验证集 Loss: 0.771710 验证集 准确率: 0.796667 \n",
      "Epoch 106 训练集 Loss: 0.168781 训练集 准确率: 1.000000 验证集 Loss: 0.771809 验证集 准确率: 0.796667 \n",
      "Epoch 107 训练集 Loss: 0.159676 训练集 准确率: 1.000000 验证集 Loss: 0.771856 验证集 准确率: 0.796667 \n",
      "Epoch 108 训练集 Loss: 0.156087 训练集 准确率: 1.000000 验证集 Loss: 0.771850 验证集 准确率: 0.793333 \n",
      "Epoch 109 训练集 Loss: 0.171491 训练集 准确率: 1.000000 验证集 Loss: 0.771918 验证集 准确率: 0.793333 \n",
      "Epoch 110 训练集 Loss: 0.155926 训练集 准确率: 1.000000 验证集 Loss: 0.772345 验证集 准确率: 0.793333 \n",
      "Epoch 111 训练集 Loss: 0.150085 训练集 准确率: 1.000000 验证集 Loss: 0.772985 验证集 准确率: 0.793333 \n",
      "Epoch 112 训练集 Loss: 0.153388 训练集 准确率: 1.000000 验证集 Loss: 0.773866 验证集 准确率: 0.793333 \n",
      "Epoch 113 训练集 Loss: 0.161802 训练集 准确率: 1.000000 验证集 Loss: 0.775237 验证集 准确率: 0.793333 \n",
      "Epoch 114 训练集 Loss: 0.151368 训练集 准确率: 0.992857 验证集 Loss: 0.776488 验证集 准确率: 0.793333 \n",
      "Epoch 115 训练集 Loss: 0.163249 训练集 准确率: 1.000000 验证集 Loss: 0.777605 验证集 准确率: 0.793333 \n",
      "Epoch 116 训练集 Loss: 0.155724 训练集 准确率: 1.000000 验证集 Loss: 0.778418 验证集 准确率: 0.793333 \n",
      "Epoch 117 训练集 Loss: 0.139298 训练集 准确率: 1.000000 验证集 Loss: 0.778948 验证集 准确率: 0.793333 \n",
      "Epoch 118 训练集 Loss: 0.146945 训练集 准确率: 1.000000 验证集 Loss: 0.779551 验证集 准确率: 0.793333 \n",
      "Epoch 119 训练集 Loss: 0.160422 训练集 准确率: 1.000000 验证集 Loss: 0.779987 验证集 准确率: 0.793333 \n",
      "Epoch 120 训练集 Loss: 0.162997 训练集 准确率: 1.000000 验证集 Loss: 0.780343 验证集 准确率: 0.790000 \n",
      "Epoch 121 训练集 Loss: 0.145577 训练集 准确率: 1.000000 验证集 Loss: 0.780615 验证集 准确率: 0.790000 \n",
      "Epoch 122 训练集 Loss: 0.143391 训练集 准确率: 1.000000 验证集 Loss: 0.780867 验证集 准确率: 0.790000 \n",
      "Epoch 123 训练集 Loss: 0.159225 训练集 准确率: 1.000000 验证集 Loss: 0.780544 验证集 准确率: 0.790000 \n",
      "Epoch 124 训练集 Loss: 0.146639 训练集 准确率: 1.000000 验证集 Loss: 0.779978 验证集 准确率: 0.790000 \n",
      "Epoch 125 训练集 Loss: 0.138486 训练集 准确率: 1.000000 验证集 Loss: 0.779864 验证集 准确率: 0.786667 \n",
      "Epoch 126 训练集 Loss: 0.140521 训练集 准确率: 1.000000 验证集 Loss: 0.779798 验证集 准确率: 0.786667 \n",
      "Epoch 127 训练集 Loss: 0.141860 训练集 准确率: 1.000000 验证集 Loss: 0.779635 验证集 准确率: 0.783333 \n",
      "Epoch 128 训练集 Loss: 0.141251 训练集 准确率: 1.000000 验证集 Loss: 0.779699 验证集 准确率: 0.780000 \n",
      "Epoch 129 训练集 Loss: 0.141533 训练集 准确率: 1.000000 验证集 Loss: 0.779654 验证集 准确率: 0.780000 \n",
      "Epoch 130 训练集 Loss: 0.145674 训练集 准确率: 1.000000 验证集 Loss: 0.779576 验证集 准确率: 0.780000 \n",
      "Epoch 131 训练集 Loss: 0.130039 训练集 准确率: 1.000000 验证集 Loss: 0.779982 验证集 准确率: 0.780000 \n",
      "Epoch 132 训练集 Loss: 0.137505 训练集 准确率: 1.000000 验证集 Loss: 0.780362 验证集 准确率: 0.780000 \n",
      "Epoch 133 训练集 Loss: 0.136319 训练集 准确率: 1.000000 验证集 Loss: 0.780734 验证集 准确率: 0.780000 \n",
      "Epoch 134 训练集 Loss: 0.124886 训练集 准确率: 1.000000 验证集 Loss: 0.781333 验证集 准确率: 0.780000 \n",
      "Epoch 135 训练集 Loss: 0.146741 训练集 准确率: 1.000000 验证集 Loss: 0.781898 验证集 准确率: 0.780000 \n",
      "Epoch 136 训练集 Loss: 0.148477 训练集 准确率: 1.000000 验证集 Loss: 0.783124 验证集 准确率: 0.780000 \n",
      "Epoch 137 训练集 Loss: 0.131460 训练集 准确率: 1.000000 验证集 Loss: 0.784633 验证集 准确率: 0.780000 \n",
      "Epoch 138 训练集 Loss: 0.140225 训练集 准确率: 1.000000 验证集 Loss: 0.786066 验证集 准确率: 0.776667 \n",
      "Epoch 139 训练集 Loss: 0.146177 训练集 准确率: 1.000000 验证集 Loss: 0.787548 验证集 准确率: 0.776667 \n",
      "Epoch 140 训练集 Loss: 0.123476 训练集 准确率: 1.000000 验证集 Loss: 0.789005 验证集 准确率: 0.776667 \n",
      "Epoch 141 训练集 Loss: 0.140691 训练集 准确率: 1.000000 验证集 Loss: 0.790629 验证集 准确率: 0.773333 \n",
      "Epoch 142 训练集 Loss: 0.129245 训练集 准确率: 0.992857 验证集 Loss: 0.792653 验证集 准确率: 0.776667 \n",
      "Epoch 143 训练集 Loss: 0.123654 训练集 准确率: 1.000000 验证集 Loss: 0.794559 验证集 准确率: 0.776667 \n",
      "Epoch 144 训练集 Loss: 0.129735 训练集 准确率: 1.000000 验证集 Loss: 0.796257 验证集 准确率: 0.776667 \n",
      "Epoch 145 训练集 Loss: 0.128010 训练集 准确率: 1.000000 验证集 Loss: 0.797010 验证集 准确率: 0.776667 \n",
      "Epoch 146 训练集 Loss: 0.125221 训练集 准确率: 1.000000 验证集 Loss: 0.797253 验证集 准确率: 0.776667 \n",
      "Epoch 147 训练集 Loss: 0.125092 训练集 准确率: 1.000000 验证集 Loss: 0.797028 验证集 准确率: 0.776667 \n",
      "Epoch 148 训练集 Loss: 0.129716 训练集 准确率: 1.000000 验证集 Loss: 0.796594 验证集 准确率: 0.776667 \n",
      "Epoch 149 训练集 Loss: 0.127440 训练集 准确率: 1.000000 验证集 Loss: 0.795736 验证集 准确率: 0.776667 \n",
      "Epoch 150 训练集 Loss: 0.127539 训练集 准确率: 1.000000 验证集 Loss: 0.794705 验证集 准确率: 0.776667 \n",
      "Epoch 151 训练集 Loss: 0.129674 训练集 准确率: 1.000000 验证集 Loss: 0.793292 验证集 准确率: 0.776667 \n",
      "Epoch 152 训练集 Loss: 0.130153 训练集 准确率: 1.000000 验证集 Loss: 0.791957 验证集 准确率: 0.776667 \n",
      "Epoch 153 训练集 Loss: 0.132929 训练集 准确率: 1.000000 验证集 Loss: 0.791021 验证集 准确率: 0.776667 \n",
      "Epoch 154 训练集 Loss: 0.124886 训练集 准确率: 1.000000 验证集 Loss: 0.790099 验证集 准确率: 0.773333 \n",
      "Epoch 155 训练集 Loss: 0.120907 训练集 准确率: 1.000000 验证集 Loss: 0.789464 验证集 准确率: 0.773333 \n",
      "Epoch 156 训练集 Loss: 0.126569 训练集 准确率: 1.000000 验证集 Loss: 0.789437 验证集 准确率: 0.773333 \n",
      "Epoch 157 训练集 Loss: 0.120843 训练集 准确率: 1.000000 验证集 Loss: 0.789455 验证集 准确率: 0.773333 \n",
      "Epoch 158 训练集 Loss: 0.119738 训练集 准确率: 1.000000 验证集 Loss: 0.789862 验证集 准确率: 0.773333 \n",
      "Epoch 159 训练集 Loss: 0.127171 训练集 准确率: 1.000000 验证集 Loss: 0.790954 验证集 准确率: 0.773333 \n",
      "Epoch 160 训练集 Loss: 0.121001 训练集 准确率: 1.000000 验证集 Loss: 0.792008 验证集 准确率: 0.773333 \n",
      "Epoch 161 训练集 Loss: 0.125278 训练集 准确率: 1.000000 验证集 Loss: 0.792723 验证集 准确率: 0.773333 \n",
      "Epoch 162 训练集 Loss: 0.117455 训练集 准确率: 1.000000 验证集 Loss: 0.793442 验证集 准确率: 0.773333 \n",
      "Epoch 163 训练集 Loss: 0.129108 训练集 准确率: 1.000000 验证集 Loss: 0.794031 验证集 准确率: 0.776667 \n",
      "Epoch 164 训练集 Loss: 0.114908 训练集 准确率: 1.000000 验证集 Loss: 0.794588 验证集 准确率: 0.776667 \n",
      "Epoch 165 训练集 Loss: 0.124035 训练集 准确率: 1.000000 验证集 Loss: 0.794956 验证集 准确率: 0.776667 \n",
      "Epoch 166 训练集 Loss: 0.118233 训练集 准确率: 1.000000 验证集 Loss: 0.795327 验证集 准确率: 0.776667 \n",
      "Epoch 167 训练集 Loss: 0.117124 训练集 准确率: 1.000000 验证集 Loss: 0.795535 验证集 准确率: 0.773333 \n",
      "Epoch 168 训练集 Loss: 0.112617 训练集 准确率: 1.000000 验证集 Loss: 0.795524 验证集 准确率: 0.773333 \n",
      "Epoch 169 训练集 Loss: 0.129865 训练集 准确率: 1.000000 验证集 Loss: 0.795331 验证集 准确率: 0.773333 \n",
      "Epoch 170 训练集 Loss: 0.112377 训练集 准确率: 1.000000 验证集 Loss: 0.794677 验证集 准确率: 0.773333 \n",
      "Epoch 171 训练集 Loss: 0.123831 训练集 准确率: 1.000000 验证集 Loss: 0.794435 验证集 准确率: 0.770000 \n",
      "Epoch 172 训练集 Loss: 0.118866 训练集 准确率: 1.000000 验证集 Loss: 0.794352 验证集 准确率: 0.770000 \n",
      "Epoch 173 训练集 Loss: 0.119889 训练集 准确率: 1.000000 验证集 Loss: 0.794536 验证集 准确率: 0.770000 \n",
      "Epoch 174 训练集 Loss: 0.119439 训练集 准确率: 1.000000 验证集 Loss: 0.794802 验证集 准确率: 0.770000 \n",
      "Epoch 175 训练集 Loss: 0.104424 训练集 准确率: 1.000000 验证集 Loss: 0.795205 验证集 准确率: 0.770000 \n",
      "Epoch 176 训练集 Loss: 0.124808 训练集 准确率: 1.000000 验证集 Loss: 0.795552 验证集 准确率: 0.770000 \n",
      "Epoch 177 训练集 Loss: 0.128752 训练集 准确率: 1.000000 验证集 Loss: 0.796389 验证集 准确率: 0.770000 \n",
      "Epoch 178 训练集 Loss: 0.128106 训练集 准确率: 1.000000 验证集 Loss: 0.797946 验证集 准确率: 0.770000 \n",
      "Epoch 179 训练集 Loss: 0.119299 训练集 准确率: 1.000000 验证集 Loss: 0.799138 验证集 准确率: 0.770000 \n",
      "Epoch 180 训练集 Loss: 0.121283 训练集 准确率: 1.000000 验证集 Loss: 0.800013 验证集 准确率: 0.770000 \n",
      "Epoch 181 训练集 Loss: 0.116086 训练集 准确率: 1.000000 验证集 Loss: 0.800517 验证集 准确率: 0.770000 \n",
      "Epoch 182 训练集 Loss: 0.113054 训练集 准确率: 1.000000 验证集 Loss: 0.801677 验证集 准确率: 0.770000 \n",
      "Epoch 183 训练集 Loss: 0.125860 训练集 准确率: 1.000000 验证集 Loss: 0.802637 验证集 准确率: 0.770000 \n",
      "Epoch 184 训练集 Loss: 0.114271 训练集 准确率: 1.000000 验证集 Loss: 0.802781 验证集 准确率: 0.770000 \n",
      "Epoch 185 训练集 Loss: 0.109337 训练集 准确率: 1.000000 验证集 Loss: 0.802988 验证集 准确率: 0.770000 \n",
      "Epoch 186 训练集 Loss: 0.103761 训练集 准确率: 1.000000 验证集 Loss: 0.802679 验证集 准确率: 0.770000 \n",
      "Epoch 187 训练集 Loss: 0.116532 训练集 准确率: 1.000000 验证集 Loss: 0.801947 验证集 准确率: 0.770000 \n",
      "Epoch 188 训练集 Loss: 0.115861 训练集 准确率: 1.000000 验证集 Loss: 0.801091 验证集 准确率: 0.770000 \n",
      "Epoch 189 训练集 Loss: 0.107538 训练集 准确率: 1.000000 验证集 Loss: 0.800409 验证集 准确率: 0.770000 \n",
      "Epoch 190 训练集 Loss: 0.120732 训练集 准确率: 1.000000 验证集 Loss: 0.799986 验证集 准确率: 0.770000 \n",
      "Epoch 191 训练集 Loss: 0.109753 训练集 准确率: 1.000000 验证集 Loss: 0.799211 验证集 准确率: 0.770000 \n",
      "Epoch 192 训练集 Loss: 0.103070 训练集 准确率: 1.000000 验证集 Loss: 0.798596 验证集 准确率: 0.770000 \n",
      "Epoch 193 训练集 Loss: 0.113524 训练集 准确率: 1.000000 验证集 Loss: 0.798516 验证集 准确率: 0.766667 \n",
      "Epoch 194 训练集 Loss: 0.099934 训练集 准确率: 1.000000 验证集 Loss: 0.798481 验证集 准确率: 0.766667 \n",
      "Epoch 195 训练集 Loss: 0.101900 训练集 准确率: 1.000000 验证集 Loss: 0.799102 验证集 准确率: 0.766667 \n",
      "Epoch 196 训练集 Loss: 0.116384 训练集 准确率: 1.000000 验证集 Loss: 0.799790 验证集 准确率: 0.766667 \n",
      "Epoch 197 训练集 Loss: 0.111911 训练集 准确率: 1.000000 验证集 Loss: 0.800411 验证集 准确率: 0.763333 \n",
      "Epoch 198 训练集 Loss: 0.102728 训练集 准确率: 1.000000 验证集 Loss: 0.801036 验证集 准确率: 0.763333 \n",
      "Epoch 199 训练集 Loss: 0.107700 训练集 准确率: 1.000000 验证集 Loss: 0.801770 验证集 准确率: 0.763333 \n",
      "Cora数据集 结果\n",
      "最好验证集 第 45 Epoch 准确率 0.826667\n",
      "对应测试集合 准确率: 0.800000\n"
     ]
    }
   ],
   "source": [
    "# 可以自己调整超参数，比如学习率，epoch数，看看结果变化如何\n",
    "!python check_on_cora.py --use_demo_gat --epoch 200 --hidden_size 8 --learning_rate 0.01 --dropout 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "学有余力的同学，可以考虑优化GAT的多头注意力实现，这里我们不做要求。优化版的 GAT 层代码可参考：https://github.com/PaddlePaddle/PGL/blob/main/pgl/layers/conv.py#L87"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "PaddlePaddle 1.8.4 (Python 3.5)",
   "language": "python",
   "name": "py35-paddle1.2.0"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
